VBA открыть самый последний файл в общей папке - PullRequest
0 голосов
/ 17 февраля 2020

Я хотел бы открыть последний файл в общей папке. У меня есть код, который отлично работает, когда я прошу проверить файлы в папке моего ноутбука, например «Загрузки» ... но мне нужно открыть папку в общем драйвере, а затем скопировать информацию об этой книге и вставить в другой файл.

Здесь вы можете увидеть, что у меня есть до этого момента.

'Force the explicit declaration of variables
Option Explicit

Sub OpenLatestFile()

    'Declare the variables
    Dim MyPath As String
    Dim MyFile As String
    Dim LatestFile As String
    Dim LatestDate As Date
    Dim LMD As Date

    'Specify the path to the folder
    MyPath = "P:\GTS\zdss\"

    'Make sure that the path ends in a backslash
    If Right(MyPath, 1) <> "\" Then MyPath = MyPath & "\"

    'Get the first Excel file from the folder
    MyFile = Dir(MyPath & "*.xls", vbNormal)

    'If no files were found, exit the sub
    If Len(MyFile) = 0 Then
        MsgBox "No files were found...", vbExclamation
        Exit Sub
    End If

    'Loop through each Excel file in the folder
    Do While Len(MyFile) > 0

        'Assign the date/time of the current file to a variable
        LMD = FileDateTime(MyPath & MyFile)

        'If the date/time of the current file is greater than the latest
        'recorded date, assign its filename and date/time to variables
        If LMD > LatestDate Then
            LatestFile = MyFile
            LatestDate = LMD
        End If

        'Get the next Excel file from the folder
        MyFile = Dir

    Loop

    'Open the latest file
    Workbooks.Open MyPath & LatestFile

End Sub

1 Ответ

0 голосов
/ 17 февраля 2020

Вот 3 идеи. Я не уверен, решит ли кто-нибудь вашу проблему, но, возможно, это поможет вам.

1) Я нашел это обсуждение на форуме (http://www.vbaexpress.com/forum/showthread.php?19669-Workbooks-Open-using-network-path). В моем понимании проблема кажется близкой к вам. Может быть, попробуйте использовать несколько строк, чтобы управлять ошибками (начните с On Error Resume далее).

2) Я думаю, что вы уже убедились, но расширение файла ".xls", а не ".xlsx "?

3) Для выполнения операций с датами в VBA необходимы определенные функции. Здесь вы делаете сравнение, как если бы оно было целым числом (LMD> LatestDate). Более того, я не уверен, что LatestDate будет иметь правильное значение, потому что вы никогда не определяете его в начале. Я предлагаю изменить код таким образом. Сначала определите LatestDate перед оператором While с произвольным низким значением (так что вы уверены, что переменная имеет значение, и оператор If LMD> LatestDate будет работать правильно).

LatestDate = Format("01.01.1900", "dd.mm.yyyy")

Во-вторых, измените If LMD> Оператор LatestDate:

If DateDiff("d",LatestDate,LMD) > 0 Then

Конечно, вам нужно изменить параметр "d" (для дня), если вы хотите сравнение в другой единице.

Cheers.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...