Открыть в определенной папке файл за указанную дату - VBA
Формулировка задачи:
Подскажите как в определенной папке, где куча однотипных txt -файлов с разными датами выбрать самый свежий файл не за последнюю дату, а за указанную дату например в диалоговом окне InputBox.
То есть если например в папке
за дату 20.01.2017 5 файлов,
за дату 21.01.2017 2 файлов,
за дату 23.01.2017 1 файл,
за дату 24.01.2017 4 файла.
Указали в InputBox дату 21.01.2017 и выбрался самый последний из 2-х файлов за 21.01.2017 дату.
например нарыл такой код по открытию самого последнего файла в папке,
нужно переделать под открытие последнего файла за указанную дату
Листинг программы
- Sub открытие_последнего_файла2()
- Application.ScreenUpdating = False
- Dim FSO As New Scripting.FileSystemObject
- ' если на срочке ниже позникает ошибка "User-defined type not defined", нужно в настройках (Tools-References) установть признак Microsoft Scripting Runtime
- Dim fld As Scripting.Folder
- Dim strFile As String
- Dim fl As Scripting.File
- Dim dicF As New Scripting.Dictionary
- Dim СамыйПоследнийФайл
- Set fld = FSO.GetFolder("C:\Users\Desktop\01")
- СамыйПоследнийФайл = LastFile$(fld, "баланс*.???", 3)
- Workbooks.Open (СамыйПоследнийФайл)
- Application.ScreenUpdating = True
- End Sub
- Function LastFile$(ByVal FolderPath As String, Optional ByVal Mask As String = "", _
- Optional ByVal SearchDeep As Long = 999)
- Dim FilenamesCollection As New Collection ' создаём пустую коллекцию
- Set FSO = CreateObject("Scripting.FileSystemObject") ' создаём экземпляр FileSystemObject
- GetAllFileNamesUsingFSO FolderPath, Mask, FSO, FilenamesCollection, SearchDeep ' поиск
- Set FSO = Nothing: Application.StatusBar = False ' очистка строки состояния Excel
- Dim maxFileDate As Double
- For Each File In FilenamesCollection ' перебираем все файлы среди найденных
- currFileDate = FileDateTime(File) ' считываем дату последнего сохранения
- If currFileDate > maxFileDate Then LastFile$ = File: maxFileDate = currFileDate
- Next File
- End Function
или что-то такое подобное, не хватает опыта понять в чем ошибка
Листинг программы
- Application.ScreenUpdating = False
- Dim FSO As New Scripting.FileSystemObject
- ' если на срочке ниже позникает ошибка "User-defined type not defined", нужно в настройках (Tools-References) установть признак Microsoft Scripting Runtime
- Dim fld As Scripting.Folder
- Dim strFile As String
- Dim fl As Scripting.file
- Dim dicF As New Scripting.Dictionary
- Dim Файл
- Set fld = FSO.GetFolder("C:\Users\Desktop\01")
- Dim FileName$, LastFile$, ThisDate As Date, LastDate As Date
- Dim PathName$, Template$
- PathName = fld '
- Template = PathName & "" & "баланс*.???" ' все файлы
- FileName = Dir(Template) ' инициализация
- LastDate = InputBox(Format("dd.mm.yy"))
- ' просмотр файлов в заданном каталоге
- For Each fl In fld.Files
- If FileDateTime(FileName) = LastDate Then
- MsgBox LastDate
- FileName = Dir ' выборка следующего
- End If
- Next
Решение задачи: «Открыть в определенной папке файл за указанную дату»
textual
Листинг программы
- Sub tt()
- ' если на срочке ниже позникает ошибка "User-defined type not defined", нужно в настройках (Tools-References) установть признак Microsoft Scripting Runtime
- Dim FSO As New Scripting.FileSystemObject
- Dim fld As Scripting.Folder
- Dim fl As Scripting.file, x As Scripting.file
- Dim m As Date, d As Date
- Set fld = FSO.GetFolder("e:\Downloads\_тест")
- Dim LastDate As Date
- LastDate = InputBox(Format("dd.mm.yy"))
- ' просмотр файлов в заданном каталоге
- For Each fl In fld.Files
- d = FileDateTime(fl)
- If LastDate = Format(d, "dd.mm.yy") Then
- m = Application.Max(m, d)
- If m = d Then Set x = fl
- End If
- Next
- If Not x Is Nothing Then
- MsgBox "Можете делать что угодно с файлом " & x.Name, vbInformation
- Else
- MsgBox "Таких Файлов нет!", vbCritical
- End If
- End Sub
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д