Как сравнить имена файлов в каталоге и вернуть совпадающие имена в Excel VBA - PullRequest
0 голосов
/ 23 мая 2019

Я пытаюсь написать код VBA для макроса, который объединяет файл .pptx и файл .xlsx определенным образом. Я уже разобрался, как кодировать объединяющуюся часть. Однако у меня есть каталог с сотнями файлов, которые необходимо объединить, и на данный момент я должен выбрать каждый отдельный файл .xls и файл .pptx с помощью диалогового окна файла. Я хотел бы ускорить весь процесс, написав код, который сканирует файлы в каталоге (который я выбрал с помощью диалогового окна файлов), затем возвращает путь к соответствующим файлам .xls и .pptx, а затем объединяет каждое совпадение. , Соответствующие файлы имеют одинаковые имена со следующим синтаксисом: XLS-файлы: 123ABC456_sheets_011.xlsx PPTX-файлы: 123ABC456_slides_011.pptx Поэтому для сравнения необходимо сравнить только первые 9 цифр.

Я попытался написать код, который создает строковый массив с путем ко всем файлам в определенном каталоге, однако, поскольку у меня нет большого опыта работы с VBA, я не знаю, как посмотреть, является ли массив заполнен всеми именами файлов. На данный момент я застрял. Я думаю, что лучше создать два строковых массива, один с файлами .xlsx, а другой с файлами .pptx, а затем как-то сравнить их друг с другом, но я понятия не имею, как это сделать. Внизу вы можете увидеть, что у меня есть до сих пор. Буду рад, если кто-нибудь сможет мне помочь!

Sub IdentifyFiles()

    Dim selectedPATH As String
    Dim XLSArray As Variant
    Dim i As Integer
    Dim oFile As Object
    Dim oFSO As Object
    Dim oFolder As Object
    Dim oFiles As Object

    'Dialog to choose the folder
    With Application.FileDialog(msoFileDialogFolderPicker)
        .AllowMultiSelect = False
        .Title = "Please choose folder"
        If .Show = -1 Then
            'ok click
            selectedPATH = .SelectedItems(1)
        Else
            'cancel click
        End If
    End With

    Set oFSO = CreateObject("Scripting.FileSystemObject")
    Set oFolder = oFSO.Getfolder(selectedPATH)
    Set oFiles = oFolder.Files

    If oFiles.Count = 0 Then MsgBox "no contents in chosen folder"

    ReDim XLSArray(1 To oFiles.Count)
    i = 1
    For Each oFile In oFiles
        XLSArray(i) = oFile.Name
        i = i + 1
    Next

End Sub
...