Поиск файла по маске, чтение атрибутов найденного файла в VBScript

Стоит задача найти в папке все файлы с расширением .xlsx и с файлом, у которого дата последнего изменения не более 20 минут назад произвести какие-либо действия. У меня есть рабочий скрипт, который работает с файлом, у которого явно указано его имя

Sub Test()
Dim dtCutOff
Dim File
Dim filespec
Dim fso
Dim f


 dtCutOff=DateAdd("n", -20, Now)                       'беру текущее время минус 20 минут
 
 File="18.06.2020_00.09.03_volume.xlsx"               'сам файл
 filespec="D:\Report_3d\"&File                        'путь к файлу
Set fso=CreateObject("scripting.filesystemobject") 
Set f=fso.GetFile(filespec) 

    If f.DateLastModified > dtCutOff Then                 'проверяю время модификации файла с текущем временем -20 мин
    MsgBox "Файл " &f.Name& " изменён позднее "&dtCutOff  'если были изменения файла, то вывожу MsgBox
    End If 

Set f=Nothing 
Set fso=Nothing

End Sub

Есть кусочек скрипта, который по маске находит все файлы в папке с расширением .xlsx и выводит поочередно названия файлов в MsgBox

Sub Mask()
Dim objShellApp
Dim objFolder
Dim objFolderItems
Dim file
Dim oFSO

Set oFSO = CreateObject("Scripting.FileSystemObject") 

Set objShellApp = CreateObject("Shell.Application")
Set objFolder = objShellApp.NameSpace("D:\Report_3d")
Set objFolderItems = objFolder.Items()
objFolderItems.Filter 64+128, "*.xlsx"
For Each file In objFolderItems
        
MsgBox file
                    
Next
End Sub

На следующем шаге я видимо делаю ошибку, и с этим мне нужна помощь. Далее я пытаюсь обратиться к переменной File и функцией GetFile пытаюсь получить атрибуты файла, сравнить время изменения, и, если все ок, то выдать MsgBox. Но это не работает. И я не могу найти информации по этому вопросу, прошу помощи и указания на ошибки

Sub Mask()
Dim objShellApp
Dim objFolder
Dim objFolderItems
Dim file
Dim oFSO    
Dim dtCutOff
Dim filespec
Dim f
    
dtCutOff=DateAdd("n", -20, Now)

Set oFSO = CreateObject("Scripting.FileSystemObject")    
Set objShellApp = CreateObject("Shell.Application")

Set objFolder = objShellApp.NameSpace("D:\Report_3d")
Set objFolderItems = objFolder.Items()
objFolderItems.Filter 64+128, "*.xlsx"

For Each file In objFolderItems
    
    Set f=oFSO.GetFile(file) 
    If f.DateLastModified > dtCutOff Then

MsgBox "Файл " &f.Name& " изменён позднее "&dtCutOff
End If 

Next

Set f=Nothing 
Set oFSO=Nothing

End Sub

Такой вариант тоже не приносит результата:

For Each file In objFolderItems
    
    If file.DateLastModified > dtCutOff Then

MsgBox "Файл " &file& " изменён позднее "&dtCutOff
End If 
    
Next

Ответы (1 шт):

Автор решения: Cotton Pericranium

Все оказалось проще. Не уверен, что это правильный вариант, но он работает. Я использовал метод GetFile не в том виде. Методом тыка обнаружил, что следующий код оказался рабочим и это то, что мне нужно

For Each file In objFolderItems
    
    Set oFileInfo = oFSO.GetFile("D:\Report_3d\"&file.Name)
    
    If oFileInfo.DateLastModified > dtCutOff Then

MsgBox "Файл " &oFileInfo.Name& " изменен позднее "&dtCutOff
End If 
 
→ Ссылка