#excel #vba
Вопрос:
В таблице Excel у меня есть 10 имен файлов, таких как:
тест1, тест2, тест3
Все файлы являются PDF-файлами. Затем мне нужно найти эти файлы в папке. Если бы я нашел test1 по пути C:UsersSOURCE затем я беру это и копирую в папку на рабочем столе C:UsersDestination.
Но ничего не происходит, он не копировал файлы из папки «источник» — > «назначение».
Sub copyFile()
Dim objFSO As Object
Dim strFileToCopy, strOldPath As String, strNewPath As String
strOldPath = "C:UsersSOURCE" 'Verzeichnis in dem die Datei liegt
strNewPath = "C:UsersDestination" 'Verzeichnis in welches kopiert werden soll
With ActiveSheet
strFileToCopy = .Range("A1") 'Zelle mit dem Namen
strFileToCopy = strFileToCopy amp; ".pdf" 'Suffix anhängen
If Dir(strOldPath amp; strFileToCopy, vbNormal) <> "" Then
Set objFSO = CreateObject("Scripting.FileSystemObject")
objFSO.copyFile strOldPath amp; strFileToCopy, strNewPath amp; strFileToCopy
End If
End With
Set objFSO = Nothing
End Sub
Я очень благодарен за каждую помощь. Большое спасибо!
Дополнительная информация: значение в A1 равно test1 файл pdf в исходном пути-test1.pdf
Комментарии:
1. Вы пробовали пройти через него, пока он работает, чтобы увидеть каждое принятое им решение? Является ли проблема
If
утверждением?2. Вы проверили
strOldPath amp; strFileToCopy
, возвращает ли он правильный путь? похоже, у вас отсутствует косая черта, так что это должно бытьstrOldPath amp; "" amp; strFileToCopy
3. Уважаемый @Raymond Wu, значение в A1 = test1.pdf и имя файла в исходной папке также «test1.pdf». После того, как я изменил код на «strOldPath amp;» «amp; strFileToCopy», я получаю сообщение об ошибке «ошибка выполнения 53, файл не найден». Я проверил путь, это правильный путь.
4. @braX да, похоже, что код vba не выполняет эту строку кода: <код>Set objFSO = CreateObject(«Сценарии. FileSystemObject») objFSO.CopyFile strOldPath и strFileToCopy, strNewPath и strFileToCopy </код>
Ответ №1:
Не объединяйте путь вручную. Вместо этого используйте FileSystemObject
(только для Windows) методы.
Dim objFSO As Object, OldPath As String
...
Set objFSO = CreateObject("Scripting.FileSystemObject")
OldPath = objFSO.BuildPath(strOldPath, strFileToCopy)
If objFSO.FileExists(OldPath) Then
objFSO.copyFile OldPath, objFSO.BuildPath(strNewPath, strFileToCopy)
End If
...
Комментарии:
1. большое вам спасибо за ваш подход!! Это решило именно мою проблему. Не могли бы вы немного объяснить мне, почему этот метод работает? Я хочу учиться и совершенствовать свои навыки VBA.
2. но если инструмент не нашел файл, как я могу сообщить excel, что он должен скопировать отсутствующие файлы на новую вкладку?
3.
FileSystemObject.BuildPath
метод всегда возвращает допустимый путь к файлу для указанной папки и пути. ТакжеFileSystemObject.FileExists
лучше, чемDir
для путей, отличных от ASCII. docs.microsoft.com/en-us/office/vba/language/reference/…4. спасибо за вашу помощь. как я могу справиться с этим, если у меня много папок, в которых мне нужно искать?
5. Вы можете поместить список папок в массив или коллекцию и выполнять поиск в цикле