Макрос для поиска книг xlsm в заданных папках / подпапках на основе критериев, затем проверка значения в каждой книге - PullRequest
0 голосов
/ 27 марта 2019

Я пытаюсь создать макрос, который перечисляет все файлы в данной папке (и ее подпапках), которые соответствуют критериям для имени файла (в моем примере " job checklist ") и типа (в мой пример "* .xlsm"). Поскольку все рабочие книги этого типа и соглашения об именах в моей папке поиска относятся к одному и тому же типу, мне нужно открывать и считывать значения из каждой рабочей книги и копировать их в мою рабочую книгу. при запуске макроса в рабочей книге хоста должна быть отмечена дата / время выполнения, чтобы при последующем запуске макроса только новые рабочие книги ИЛИ рабочие книги, которые были изменены с момента открытия самой последней отметки времени и обновления на хосте Учебное пособие.

Я пытался использовать некоторый рекурсивный код, найденный в других сообщениях, но темы, но мне трудно включить критерии поиска: - имя файла - тип файла - дата изменения [здесь] ( макрос VBA, который ищет файл в нескольких подпапках )

Я также пытался внедрить код из Pearson здесь , чтобы позволить мне проверить атрибуты файлов в файлах xls, но, похоже, он не работает (возможно, из-за 64-битной версии, хотя я нашел другую версию, которая должна была быть совместимым)

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

рабочий код, который у меня есть, который перечисляет все файлы типа .zip в моей рабочей книге хоста, я не знаю, как проверить дату изменения файла. я предполагаю, что если бы я мог, я мог бы добавить некоторый код для открытия файлов (которые соответствуют типу, имени и изменены (по сравнению с ячейкой значения даты / времени в рабочей книге хоста и обновляются каждый раз при запуске макроса), а затем извлекать значения из известный лист / диапазон в рабочей книге хоста.

```vba
Sub MainList()
    Dim folder, xdir As Variant
    Set folder = Application.FileDialog(msoFileDialogFolderPicker)
    Call ListFilesInFolder("C:\Users\60066690\Desktop\Documents from BCP and loose MTC", True)
End Sub

Sub ListFilesInFolder(ByVal xFolderName As String, ByVal xIsSubfolders As Boolean)
    Dim xFileSystemObject As Object
    Dim xFolder As Object
    Dim xSubFolder As Object
    Dim xFile As Object
    Dim rowIndex As Long
    Set xFileSystemObject = CreateObject("Scripting.FileSystemObject")
    Set xFolder = xFileSystemObject.GetFolder(xFolderName)
    rowIndex = Application.ActiveSheet.Range("A65536").End(xlUp).Row + 1
    For Each xFile In xFolder.Files
        If Not InStr(1, xFile.Name, ".zip") = 0 Then
'could need to add in here If for name, but not sure how to add If for modified date, if i could i could compare the modified date to a date cell in this workbook
            Application.ActiveSheet.Cells(rowIndex, 1).Formula = xFile.Name
'need to add some code in here to open the found workbook, then extract some values from known sheets/cells, store those values in variables, then close the found workbook and output the found variables to the colums beside the file name            
rowIndex = rowIndex + 1
        End If
    Next xFile
    If xIsSubfolders Then
        For Each xSubFolder In xFolder.SubFolders
            ListFilesInFolder xSubFolder.Path, True
        Next xSubFolder
    End If
    Set xFile = Nothing
    Set xFolder = Nothing
    Set xFileSystemObject = Nothing
End Sub
```
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...