Я думаю, что вы ищете что-то вроде выбранного ответа для на этот вопрос .
Вы можете адаптировать код под свои конкретные требования, передавая аргумент в подобномфункция ниже.Обратите внимание, что аргумент directory должен содержать обратную косую черту в конце (например, "C: \ Users \").
Function NewestFile(Directory As String) As String
'PURPOSE: Get the newest file name from specified directory
Dim FileName As String
Dim MostRecentFile As String
Dim MostRecentDate As Date
Dim FileSpec As String
'Specify the file type, if any
FileSpec = "*.xls"
FileName = Dir(Directory & FileSpec)
If FileName <> "" Then
MostRecentFile = FileName
MostRecentDate = FileDateTime(Directory & FileName)
Do While FileName <> ""
If FileDateTime(Directory & FileName) > MostRecentDate Then
MostRecentFile = FileName
MostRecentDate = FileDateTime(Directory & FileName)
End If
FileName = Dir
Loop
End If
NewestFile = MostRecentFile
End Function
РЕДАКТИРОВАТЬ: Для большей гибкости вы также можете добавить опцию (как в пересмотренном ответе PeterT) для поиска файла другого типа с необязательным FileSpec аргумент, как в альтернативной функции ниже.Для этой функции, если вы не предоставите какое-либо значение для FileSpec , она будет просматривать все файлы.
Function NewestFile(ByVal Directory As String, Optional ByVal FileSpec As String = "*.*") As String
'PURPOSE: Get the newest .xls file name from
Dim FileName As String
Dim MostRecentFile As String
Dim MostRecentDate As Date
'Specify the file type, if any
FileName = Dir(Directory & FileSpec)
If FileName <> "" Then
MostRecentFile = FileName
MostRecentDate = FileDateTime(Directory & FileName)
Do While FileName <> ""
If FileDateTime(Directory & FileName) > MostRecentDate Then
MostRecentFile = FileName
MostRecentDate = FileDateTime(Directory & FileName)
End If
FileName = Dir
Loop
End If
NewestFile = MostRecentFile
End Function
Проблема скорости: функция Dir vs FileSystemObject
С точки зрения скорости, если папка, которую вы хотите просмотреть, содержит небольшое количество файлов, 2методы дадут вам одинаковые результаты примерно за одно и то же время.Однако, если в этой папке много файлов, использование подхода Dir Function вместо FileSystemObject должно значительно ускорить выполнение вашего макроса.Я не проверял это, но, похоже, это было сделано из ответов в на этот вопрос .