Открыть в определенной папке файл за указанную дату - 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 дату.
например нарыл такой код по открытию самого последнего файла в папке, нужно переделать под открытие последнего файла за указанную дату
Листинг программы
  1. Sub открытие_последнего_файла2()
  2. Application.ScreenUpdating = False
  3. Dim FSO As New Scripting.FileSystemObject
  4. ' если на срочке ниже позникает ошибка "User-defined type not defined", нужно в настройках (Tools-References) установть признак Microsoft Scripting Runtime
  5. Dim fld As Scripting.Folder
  6. Dim strFile As String
  7. Dim fl As Scripting.File
  8. Dim dicF As New Scripting.Dictionary
  9. Dim СамыйПоследнийФайл
  10. Set fld = FSO.GetFolder("C:\Users\Desktop\01")
  11. СамыйПоследнийФайл = LastFile$(fld, "баланс*.???", 3)
  12. Workbooks.Open (СамыйПоследнийФайл)
  13. Application.ScreenUpdating = True
  14. End Sub
  15. Function LastFile$(ByVal FolderPath As String, Optional ByVal Mask As String = "", _
  16. Optional ByVal SearchDeep As Long = 999)
  17. Dim FilenamesCollection As New Collection ' создаём пустую коллекцию
  18. Set FSO = CreateObject("Scripting.FileSystemObject") ' создаём экземпляр FileSystemObject
  19. GetAllFileNamesUsingFSO FolderPath, Mask, FSO, FilenamesCollection, SearchDeep ' поиск
  20. Set FSO = Nothing: Application.StatusBar = False ' очистка строки состояния Excel
  21. Dim maxFileDate As Double
  22. For Each File In FilenamesCollection ' перебираем все файлы среди найденных
  23. currFileDate = FileDateTime(File) ' считываем дату последнего сохранения
  24. If currFileDate > maxFileDate Then LastFile$ = File: maxFileDate = currFileDate
  25. Next File
  26. End Function
или что-то такое подобное, не хватает опыта понять в чем ошибка
Листинг программы
  1. Application.ScreenUpdating = False
  2. Dim FSO As New Scripting.FileSystemObject
  3. ' если на срочке ниже позникает ошибка "User-defined type not defined", нужно в настройках (Tools-References) установть признак Microsoft Scripting Runtime
  4. Dim fld As Scripting.Folder
  5. Dim strFile As String
  6. Dim fl As Scripting.file
  7. Dim dicF As New Scripting.Dictionary
  8. Dim Файл
  9. Set fld = FSO.GetFolder("C:\Users\Desktop\01")
  10. Dim FileName$, LastFile$, ThisDate As Date, LastDate As Date
  11. Dim PathName$, Template$
  12.  
  13. PathName = fld '
  14. Template = PathName & "" & "баланс*.???" ' все файлы
  15. FileName = Dir(Template) ' инициализация
  16. LastDate = InputBox(Format("dd.mm.yy"))
  17. ' просмотр файлов в заданном каталоге
  18. For Each fl In fld.Files
  19. If FileDateTime(FileName) = LastDate Then
  20. MsgBox LastDate
  21. FileName = Dir ' выборка следующего
  22. End If
  23. Next

Решение задачи: «Открыть в определенной папке файл за указанную дату»

textual
Листинг программы
  1. Sub tt()
  2.  
  3. ' если на срочке ниже позникает ошибка "User-defined type not defined", нужно в настройках (Tools-References) установть признак Microsoft Scripting Runtime
  4.    Dim FSO As New Scripting.FileSystemObject
  5.  
  6.     Dim fld As Scripting.Folder
  7.     Dim fl As Scripting.file, x As Scripting.file
  8.     Dim m As Date, d As Date
  9.  
  10.     Set fld = FSO.GetFolder("e:\Downloads\_тест")
  11.     Dim LastDate As Date
  12.  
  13.  
  14.     LastDate = InputBox(Format("dd.mm.yy"))
  15.  
  16.     ' просмотр файлов в заданном каталоге
  17.  
  18.     For Each fl In fld.Files
  19.         d = FileDateTime(fl)
  20.         If LastDate = Format(d, "dd.mm.yy") Then
  21.             m = Application.Max(m, d)
  22.             If m = d Then Set x = fl
  23.         End If
  24.     Next
  25.  
  26.     If Not x Is Nothing Then
  27.         MsgBox "Можете делать что угодно с файлом " & x.Name, vbInformation
  28.     Else
  29.         MsgBox "Таких Файлов нет!", vbCritical
  30.  
  31.     End If
  32. End Sub

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

9   голосов , оценка 4.222 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут