Как скопировать определенные файлы из подпапок в папку назначения? (Excel VBA)

Я новичок в VBA, и я очень благодарен за любую помощь с этой программой!

Цель этой программы - скопировать файлы всех определенных типов (.pdf) из сети в папку на рабочем столе. Однако файлы (.pdf) находятся в каждой из вложенных папок.

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

Это то, что я получил так далеко от работы в Интернете.

Sub Copy_test2()
Dim FSO As Object, fld As Object
Dim fsoFile As Object
Dim fsoFol As Object

    FromPath = "D:\Users\A\Desktop\test1" 'user will define this
    ToPath = "D:\Users\A\Desktop\test2"   'this will be the folder on the desktop

    If Right(FromPath, 1) <> "\" Then
        FromPath = FromPath & "\"
    End If

Set FSO = CreateObject(“Scripting.FileSystemObject”)

Set fld = FSO.GetFolder(FromPath)

If FSO.FolderExists(fld) Then
    For Each fsoFol In FSO.GetFolder(FromPath).subfolders
        For Each fsoFile In fsoFol.Files
            If Right(fsoFile, 3) = “pdf” Then
                fsoFile.Copy ToPath
            End If
        Next
    Next
End If

End Sub

Когда я запускаю его, я получаю: Ошибка выполнения '424' Объект, необходимый для

Set FSO = CreateObject(“Scripting.FileSystemObject”)

Правильно ли я использую этот код? или есть альтернативный способ выполнить эту задачу?

Спасибо!


person ducky    schedule 11.11.2017    source источник


Ответы (1)


Всегда начинайте свои модули с Option Explicit. Это заставляет вас объявить все переменные, что очень хорошо.

Затем всегда компилируйте свой код перед его запуском. Это можно сделать в меню «Отладка» -> «Скомпилировать». В вашем случае компиляция не удастся, потому что пара строковых переменных не объявлены (если они не объявлены на уровне модуля), и потому что вы используете двойные кавычки, которые не являются ", то есть" и ". Видите разницу? VBA их не любит :-)

person Excelosaurus    schedule 11.11.2017
comment
Спасибо за предложение! Я попробую это отладить. - person ducky; 14.11.2017