Копирование и перемещение файлов в VBA Excel с помощью методов CopyFile и MoveFile объекта FileSystemObject. Синтаксис, параметры, примеры.
Копирование файлов
Метод CopyFile
Синтаксис
1 |
object.CopyFile source, destination, [overwrite] |
Параметры
Параметр | Описание |
---|---|
object | Переменная, возвращающая объект FileSystemObject. Обязательный параметр. |
source | Строковое выражение, задающее полное имя файла, который требуется скопировать в другое расположение. Для копирования нескольких файлов используются подстановочные знаки. Обязательный параметр. |
destination | Строковое выражение, задающее конечное расположение, куда требуется скопировать файл (файлы) из элемента source. Подстановочные знаки не допускаются. Обязательный параметр. |
overwrite | Логическое значение, которое указывает, требуется ли перезаписывать существующие файлы в конечном расположении. True – файлы будут перезаписаны, False – перезапись не выполняется. Необязательный параметр, по умолчанию – True. |
Если копируемый файл с полным именем source
не существует, будет сгенерирована ошибка.
При копировании одного файла методом CopyFile допустимо в параметре destination
указать другое собственное имя файла, тогда скопированный файл будет сохранен под новым именем. В том числе, можно изменить и расширение файла.
Примеры
Пример 1
Копирование одного файла в другое расположение с проверкой его существования:
1 2 3 4 5 6 7 8 9 10 11 |
Sub Primer1() Dim fso As Object 'Присваиваем переменной fso ссылку 'на новый экземпляр FileSystemObject Set fso = CreateObject("Scripting.FileSystemObject") 'Проверяем существование копируемого файла If Dir("C:\Папка 1\test1.txt") <> "" Then 'Если файл существует, копируем его в другую папку fso.CopyFile "C:\Папка 1\test1.txt", "C:\Папка 2\" End If End Sub |
Пример 2
Наглядный, но неправильный пример по копированию одного файла в другую папку со сменой собственного имени, включая расширение:
1 2 3 4 5 6 7 8 |
Sub Primer2() Dim fso As Object Set fso = CreateObject("Scripting.FileSystemObject") If Dir("C:\Папка 1\test1.txt") <> "" Then 'Копируем файл в другую папку со сменой имени, включая расширение fso.CopyFile "C:\Папка 1\test1.txt", "C:\Папка 2\test2.xlsx" End If End Sub |
Пример назван неправильным, так как у скопированного файла меняется только расширение с .txt
на .xlsx
без конвертации в другой формат. На самом деле файл так и остается текстовым, и открыть его программой Excel невозможно.
Перемещение файлов
Метод MoveFile
Синтаксис
1 |
object.MoveFile source, destination |
Параметры
Параметр | Описание |
---|---|
object | Переменная, возвращающая объект FileSystemObject. Обязательный параметр. |
source | Строковое выражение, задающее полное имя файла, который требуется переместить в другое расположение. Для перемещения нескольких файлов используются подстановочные знаки. Обязательный параметр. |
destination | Строковое выражение, задающее конечное расположение, куда требуется переместить файл (файлы) из элемента source . Подстановочные знаки не допускаются. Обязательный параметр. |
Если перемещаемый файл с полным именем source
не существует, будет сгенерирована ошибка. Ошибка произойдет и в том случае, если одноименный файл в расположении destination
уже имеется.
Примеры
Пример 3
Перемещение одного файла без проверки его существования:
1 2 3 4 5 6 7 8 9 10 |
Sub Primer3() Dim fso As Object 'Присваиваем переменной fso ссылку 'на новый экземпляр FileSystemObject Set fso = CreateObject("Scripting.FileSystemObject") 'Завершаем программу, если произойдет ошибка On Error Resume Next 'Перемещаем файл в другую папку fso.MoveFile "C:\Папка 1\Документ 1.docx", "C:\Папка 2\" End Sub |
Обработчик ошибок On Error Resume Next необходим для того, чтобы корректно завершить программу, если перемещаемый файл не существует, или он уже есть в папке назначения, в результате чего будет сгенерирована ошибка.
Пример 4
Перемещение нескольких файлов из одного расположения в другое:
1 2 3 4 5 6 7 |
Sub Primer4() Dim fso As Object Set fso = CreateObject("Scripting.FileSystemObject") On Error Resume Next 'Перемещаем файлы в другую папку fso.MoveFile "C:\Папка 1\Документ*", "C:\Папка 2\" End Sub |
В результате работы этого кода VBA Excel в новое расположение будут перемещены все файлы начинающиеся с подстроки «Документ».
Знаки подстановки
- Звездочка (*) – заменяет любое количество символов или ни одного.
- Вопросительный знак (?) – заменяет один символ или ни одного.
Знаки подстановки позволяют создать шаблон, по которому можно скопировать или переместить сразу несколько файлов.
Примеры
Примеры шаблонов с подстановочными знаками:
Все файлы Word, включая файлы с расширениями .doc и .dot:
"C:\Папка 1\*.do??"
Файлы Word, кроме файлов с расширениями .dot, .dotx и .dotm:
"C:\Папка 1\*.doc?"
Все файлы с подстрокой «01.2020» в собственном имени:
"C:\Папка 1\*01.2020*"