Извлечь данные из самого последнего файла в папке - PullRequest
0 голосов
/ 27 июня 2019

Попытка использовать самый последний файл в папке для данных.

Моя проблема в том, что мой мастер-файл Excel не использует данные из самого последнего файла данных (xlsx) для извлечения данных.Мой код в настоящее время имеет имя текущего файла (например, "Network-2019.xlsm"), но позвольте мне сказать, что я вставляю файл с именем "network.xlsm, который публикуется в папке позже. Я хочу, чтобы основной набор данных распознал это и извлек эти данные.

Function GetMostRecentExcelFile(ByVal myDirectory As String, ByVal filePattern As String) As String

    Dim fso As Object
    Set fso = CreateObject("Scripting.FileSystemObject")

    Dim myFolder As Object
    Set myFolder = fso.getfolder(IIf(Right(myDirectory, 1) = "\", myDirectory, myDirectory & "\"))

    Dim currentDate As Date
    Dim fname As String

    Dim currentFile As Object
    For Each currentFile In myFolder.Files
        If (currentDate = CDate(0) Or currentFile.DateCreated > currentDate) And currentFile.name Like filePattern _
            And InStr(LCase$(currentFile.name), ".xlsx") > 0 And InStr(currentFile.name, "~$") = 0 Then

            currentDate = currentFile.DateCreated
            fname = currentFile.name

        End If
    Next currentFile

    GetMostRecentExcelFile = fname

End Function

1 Ответ

1 голос
/ 27 июня 2019

Я бы предложил что-то вроде ниже, так как вы используете FileSystemObject

Обратите внимание, что я использовал раннее связывание. Соответствующее значение intellisense весьма полезно, и вы всегда можете перейти к позднему связыванию, если вам необходимо по какой-либо причине.

Option Explicit
Function GetMostRecentExcelFile(sFolderPath As String) As String
    Dim FSO As FileSystemObject
    Dim FO As Folder, FI As File, recentFI As File

Set FSO = New FileSystemObject
Set FO = FSO.GetFolder(sFolderPath)

For Each FI In FO.Files
    Select Case FI.Name Like "*.xlsx"
        Case True
            Select Case recentFI Is Nothing
                Case True
                    Set recentFI = FI
                Case False
                    If FI.DateCreated > recentFI.DateCreated Then
                        Set recentFI = FI
                    End If
            End Select
    End Select
Next FI

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