Создание, копирование, перемещение и удаление папок в VBA Excel методами объекта FileSystemObject. Удаление папок с помощью оператора RmDir.
Создание папки (метод CreateFolder)
CreateFolder – это метод объекта FileSystemObject, предназначенный для создания новой папки.
Синтаксис
object.CreateFolder (foldername) |
Параметр foldername
можно в скобки не заключать.
Параметры
Параметр | Описание |
---|---|
object | Переменная, возвращающая объект FileSystemObject. |
foldername | Строковое выражение, указывающее папку, которую необходимо создать. |
Если папка, указанная параметром foldername
уже существует, произойдет ошибка.
Копирование папки (метод CopyFolder)
CopyFolder – это метод объекта FileSystemObject, предназначенный для копирования папки из одного расположения в другое.
Синтаксис
object.CopyFolder source, destination, [overwrite] |
Параметры
Параметр | Описание |
---|---|
object | Переменная, возвращающая объект FileSystemObject. |
source | Строковое выражение, указывающее папку, которую требуется скопировать в другое расположение. Для копирования нескольких папок используются подстановочные знаки. |
destination | Строковое выражение, задающее конечное расположение, куда требуется скопировать папку (папки) со всеми вложениями из элемента source. Подстановочные знаки не допускаются. |
overwrite | Логическое значение, которое указывает, требуется ли перезаписывать существующие папки и файлы в конечном расположении. True – папки и файлы будут перезаписаны, False – перезапись не выполняется. Необязательный параметр. По умолчанию – True. |
Перемещение папки (метод MoveFolder)
MoveFolder – это метод объекта FileSystemObject, предназначенный для перемещения папки из одного расположения в другое.
Синтаксис
object.MoveFolder (source, destination) |
Параметры
Параметр | Описание |
---|---|
object | Переменная, возвращающая объект FileSystemObject. |
source | Строковое выражение, указывающее папку, которую требуется переместить в другое расположение. Для перемещения нескольких папок используются подстановочные знаки. |
destination | Строковое выражение, задающее конечное расположение, куда требуется переместить папку (папки) со всеми вложениями из элемента source. Подстановочные знаки не допускаются. |
Удаление папки (метод DeleteFolder)
DeleteFolder – это метод объекта FileSystemObject, предназначенный для удаления папки с диска со всем ее содержимым.
Синтаксис
object.DeleteFolder folderspec, [force] |
Параметры
Параметр | Описание |
---|---|
object | Переменная, возвращающая объект FileSystemObject. |
folderspec | Строковое выражение, указывающее папку, которую следует удалить. Для удаления нескольких папок используются подстановочные знаки. |
force | Значение типа Boolean: True – удаляются все папки, False (по умолчанию) – не удаляются папки с атрибутом «только для чтения» (необязательный параметр). |
Метод DeleteFolder
удаляет папки независимо от того, есть ли в них содержимое или нет.
Удаление папки (оператор RmDir)
RmDir – это оператор, предназначенный для удаления пустых папок и каталогов.
Синтаксис
- path – строковое выражение, определяющее каталог или папку, которую необходимо удалить.
Если удаляемый каталог или папка содержит файлы, произойдет ошибка.
Примеры
Пример 1
Создание папок в VBA Excel с помощью метода CreateFolder:
Sub Primer1() Dim fso As Object, i As Integer ‘Создаем новый экземпляр FileSystemObject Set fso = CreateObject(«Scripting.FileSystemObject») ‘Создаем несколько новых папок With fso .CreateFolder («C:Папка главная») For i = 1 To 5 .CreateFolder «C:Папка главнаяПапка « & i Next End With End Sub |
В результате работы этого кода на диске C
будет создана Папка главная
и в ней еще 5 папок, которые будем использовать для копирования, перемещения и удаления.
Пример 2
Копирование папок в VBA Excel с помощью метода CopyFolder:
Sub Primer2() Dim fso As Object Set fso = CreateObject(«Scripting.FileSystemObject») ‘Копируем папки With fso .CopyFolder «C:Папка главнаяПапка 2», «C:Папка главнаяПапка 1» .CopyFolder «C:Папка главнаяПапка 3«, «C:Папка главнаяПапка 1Папка 2« End With End Sub |
Код этого примера копирует папки следующим образом: Папка 2
в Папка 1
, а Папка 3
в расположение Папка 1Папка 2
.
Пример 3
Перемещение папок в VBA Excel с помощью метода MoveFolder:
Sub Primer3() Dim fso As Object Set fso = CreateObject(«Scripting.FileSystemObject») ‘Перемещаем папки With fso .MoveFolder «C:Папка главнаяПапка 3», «C:Папка главнаяПапка 2» .MoveFolder «C:Папка главнаяПапка 4«, «C:Папка главнаяПапка 2« .MoveFolder «C:Папка главнаяПапка 5», «C:Папка главнаяПапка 2Папка 4« End With End Sub |
Пример 4
Удаление папок в VBA Excel с помощью метода DeleteFolder:
Sub Primer4() Dim fso As Object Set fso = CreateObject(«Scripting.FileSystemObject») ‘Удаляем папки с содержимым With fso .DeleteFolder «C:Папка главнаяПапка 1» .DeleteFolder «C:Папка главнаяПапка 2» End With End Sub |
Пример 5
Удаление пустой папки в VBA Excel с помощью оператора RmDir:
Sub Primer5() ‘Удаляем пустую папку RmDir «C:Папка главная» End Sub |
roneta90 Пользователь Сообщений: 27 |
Всем привет! подскажите пожалуйста как скопировать одну папку(folder1) со всем содержимым из одного каталога в другой с переименованием т.е. конечная папка будет называться folder2 |
Roman Shaleyko Пользователь Сообщений: 31 |
#2 25.09.2016 20:30:05 VBS скрипт:
|
||
Ігор Гончаренко Пользователь Сообщений: 13746 |
#3 25.09.2016 21:26:29 мне удалось получить копию папки C:Dell с именем C:Dell2
Изменено: Ігор Гончаренко — 25.09.2016 21:27:34 Программисты — это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете! |
||
Karataev Пользователь Сообщений: 2306 |
#4 25.09.2016 21:36:50 Ігор Гончаренко, да Ваш способ работает. Изменил свой код по мотивам вышерасположенного поста.
Изменено: Karataev — 25.09.2016 21:38:16 |
||
roneta90 Пользователь Сообщений: 27 |
#5 27.09.2016 00:15:33 с простым копирование получилось . чтобы не плодить темы сразу в этой опишу полную задачу(хотела сама допилить но чо то не получается) : нужно скопировать три папки с датами 20160924 20160925 20160926 из папки user в папку main с именами 20160924n и т.д. (n — это не переменная это часть имени папки) пользуюсь вот таким циклом
названия берутся из файла( см влож) на листе»base» столбец С начиная со второй ячейки. при выполнении пишет Path not found . я так понимаю папку не находит хотя пути я перепроверяла 100 раз может чо то неправильно в тексте. Там в столбце С название папок прописаны в формате даты может это оказывает влияние Прикрепленные файлы
Изменено: roneta90 — 27.09.2016 00:35:04 |
||
Karataev Пользователь Сообщений: 2306 |
Я изменил в столбце «C» формат ячеек, а чтобы даты были в нужном виде, вставил формулу. Иначе у Вас в столбце «C» фактически был не текст вида 20160925, а были числа (это можно было увидеть, если изменить формат ячеек на «Общий»). И макрос не мог найти нужную папку, т.к. у Вас имена папок вида «20160925», а в столбце «C» числа. В функции «Dir» я добавил параметр «vbDirectory». Его нужно использовать, если нужно работать с папками. |
roneta90 Пользователь Сообщений: 27 |
#7 29.09.2016 00:31:20 ок сработало спасибо! ну надеюсь последний вопрос я адаптировала под свою задачу и в итоге за каждую дату я копирую и получаю в конечной директории(с:main) за каждую дату по две папки 20160924 и 20160924_n . внутри 20160924 существую файл RS_RUS_EP747_243332.txt (т.е. адрес файла C:main20160924) его надо скопировать в папку 20160924_n . особенность в том что в названии файла RS_RUS_EP747_243332.txt: RS_RUS_EP747_ — постоянная часть а «243332» меняется: я дополнила макрос макросом копирования файла,получилось так: ругается на cnhjre FileCopy sFileName, sNewFileName eror 52 пути перепроверила вроде правильно. во вложении положила архив с директриями с:main c:User с результатом выполнения копирования ПАПОК
Прикрепленные файлы
Изменено: roneta90 — 29.09.2016 21:04:15 |
||
Doober Пользователь Сообщений: 2204 |
#8 29.09.2016 03:00:11 У вас ячейка пустая sh.Cells(1, «H»)
<#0> |
||
Hugo Пользователь Сообщений: 23251 |
#9 29.09.2016 08:39:21 А звёздочка то ведь не работает!
|
||
roneta90 Пользователь Сообщений: 27 |
#10 29.09.2016 21:03:51
я пробовала прописывать название файла без звездочки т.е. полностью такая же фигня и в ячейке sh.Cells(1, «H») исправила на sh.Cells(1, «G») |
||
lke Пользователь Сообщений: 1 |
#11 13.04.2020 09:06:52 день добрый. Задача: из папки А нужно копировать файлы XML в папку Б. После копирования, файлы в папке А нужно перенести (именно перенести, в корне А их быть не должно по копирования) в подпапку В. Т.е. в папке А есть папка В, а нужны файлы только в корне, файлы в подпапке В копировать не нужно. |
Хитрости »
15 Август 2012 129939 просмотров
В этой статье я хотел бы рассказать как средствами VBA переименовать, переместить или скопировать файл. В принципе методы переименования, перемещения и копирования, так сказать, встроены в VBA. Это значит что можно без вызова сторонних объектов переименовать, переместить или копировать любой файл. Все это делается при помощи всего двух команд: FileCopy и Name [Исходный файл] As [Новый файл]. Притом команда FileCopy выполняет только копирование, а Name [Исходный файл] As [Новый файл] — как переименование, так и перемещение. Разница лишь в том, что при переименовании мы указываем только новое имя файла, а при перемещении — другую директорию(папку), в которую следует переместить файл. Плюс рассмотрим пример удаления файла.
Так же разберем методы копирования, перемещения, переименования и удаления файлов и папок через библиотеку FileSystemObject (FSO).
Работа с файлами встроенными командами VBA
- Копирование файла
- Перемещение файла
- Переименование файла
- Удаление файла
Работа с файлами через объект FileSystemObject (FSO)
- Копирование файла
- Перемещение файла
- Переименование файла
- Удаление файла
Работа с папками через объект FileSystemObject (FSO)
- Копирование папки
- Перемещение папки
- Переименование папки
- Удаление папки
Во всех примерах работы с файлами встроенными функциями будет присутствовать проверка на наличие файла по указанному пути. Делать это будем при помощи встроенной функции Dir([PathName],[Attributes]).
PathName — указывается полный путь к файлу
Attributes — указывается признак свойств файла. Вообще их несколько(скрытый, архивный и т.п.), но нас для наших задач будет интересовать пока только один: 16(vbDirectory). Он отвечает за проверку папок и файлов без специальных свойств(т.е. не архивные, не скрытые и т.д.). Хотя по сути его можно вообще не указывать, и тогда будет по умолчанию применен атрибут 0(vbNormal) — проверка файлов без определенных свойств. Ни в том ни в другом случае ошибкой это не будет.
Sub Copy_File() Dim sFileName As String, sNewFileName As String sFileName = "C:WWW.xls" 'имя файла для копирования sNewFileName = "D:WWW.xls" 'имя копируемого файла. Директория(в данном случае диск D) должна существовать If Dir(sFileName, 16) = "" Then MsgBox "Нет такого файла", vbCritical, "www.excel-vba.ru" Exit Sub End If FileCopy sFileName, sNewFileName 'копируем файл MsgBox "Файл скопирован", vbInformation, "www.excel-vba.ru" End Sub
Sub Move_File() Dim sFileName As String, sNewFileName As String sFileName = "C:WWW.xls" 'имя исходного файла sNewFileName = "D:WWW.xls" 'имя файла для перемещения. Директория(в данном случае диск D) должна существовать If Dir(sFileName, 16) = "" Then MsgBox "Нет такого файла", vbCritical, "www.excel-vba.ru" Exit Sub End If Name sFileName As sNewFileName 'перемещаем файл MsgBox "Файл перемещен", vbInformation, "www.excel-vba.ru" End Sub
Sub Rename_File() Dim sFileName As String, sNewFileName As String sFileName = "C:WWW.xls" 'имя исходного файла sNewFileName = "C:WWW1.xls" 'имя файла для переименования If Dir(sFileName, 16) = "" Then MsgBox "Нет такого файла", vbCritical, "www.excel-vba.ru" Exit Sub End If Name sFileName As sNewFileName 'переименовываем файл MsgBox "Файл переименован", vbInformation, "www.excel-vba.ru" End Sub
Sub Delete_File() Dim sFileName As String sFileName = "C:WWW.xls" 'имя файла для удаления If Dir(sFileName, 16) = "" Then MsgBox "Нет такого файла", vbCritical, "www.excel-vba.ru" Exit Sub End If Kill sFileName 'удаляем файл MsgBox "Файл удален", vbInformation, "www.excel-vba.ru" End Sub
Как видно ничего сложного.
Так же можно проделать те же операции с файлами при помощи объекта FileSystemObject. Строк кода несколько больше и выполняться операции будут медленнее(хотя вряд ли это будет заметно на примере одного файла). Однако есть существенный плюс — при помощи FileSystemObject можно корректно производить операции с файлами и папками на сетевом диске. Хотя та же
Dir(sFileName, 16)
часто выдает ошибку при работе с сетевыми дисками.
Прежде всего следует, я думаю, пояснить что за зверь такой — FileSystemObject.
FileSystemObject (FSO)
— содержится в библиотеке типов Scripting, расположенной в файле библиотеки scrrun.dll. Объектная модель FSO дает возможность создавать, изменять, перемещать и удалять папки и файлы, собирать о них различную информацию: имена, атрибуты, даты создания или изменения и т.д. Чтобы работать с FSO необходимо создать переменную со ссылкой на объект библиотеки. Сделать это можно двумя способами: через ранее связывание и позднее. Я не буду сейчас вдаваться в подробности этих методов — тема довольно обширная и я опишу её в другой статье.
Ранее связывание:
для начала необходимо подключить библиотеку Microsoft Scripting Runtime. Делается это в редакторе VBA: References-находите там Microsoft Scripting Runtime и подключаете. Объявлять переменную FSO при раннем связывании следует так:
Dim objFSO As New FileSystemObject
Плюсы раннего связывания: с помощью Object Browser можно просмотреть список объектов, свойств, методов, событий и констант, включенных в FSO. Но есть значительный минус: если планируется использовать программу на нескольких компьютерах, то есть большая вероятность получить ошибку(читать подробнее).
Позднее связывание: ничего нигде не надо подключать, а просто используем метод CreateObject(именно этот способ используется мной в примерах ниже). Методы таким образом просмотреть не получится, но зато работать будет без проблем на любых компьютерах без дополнительных действий.
Sub Copy_File() Dim objFSO As Object, objFile As Object Dim sFileName As String, sNewFileName As String sFileName = "C:WWW.xls" 'имя исходного файла sNewFileName = "D:WWW.xls" 'имя файла для переименования 'создаем объект FileSystemObject Set objFSO = CreateObject("Scripting.FileSystemObject") 'проверяем наличие файла по указанному пути If objFSO.FileExists(sFileName) = False Then MsgBox "Нет такого файла", vbCritical, "www.excel-vba.ru" Exit Sub End If 'копируем файл Set objFile = objFSO.GetFile(sFileName) objFile.Copy sNewFileName MsgBox "Файл скопирован", vbInformation, "www.excel-vba.ru" End Sub
Sub Move_File() Dim objFSO As Object, objFile As Object Dim sFileName As String, sNewFileName As String sFileName = "C:WWW.xls" 'имя исходного файла sNewFileName = "D:WWW.xls" 'имя файла для переименования 'создаем объект FileSystemObject Set objFSO = CreateObject("Scripting.FileSystemObject") 'проверяем наличие файла по указанному пути If objFSO.FileExists(sFileName) = False Then MsgBox "Нет такого файла", vbCritical, "www.excel-vba.ru" Exit Sub End If 'перемещаем файл Set objFile = objFSO.GetFile(sFileName) objFile.Move sNewFileName MsgBox "Файл перемещен", vbInformation, "www.excel-vba.ru" End Sub
Sub Rename_File() Dim objFSO As Object, objFile As Object Dim sFileName As String, sNewFileName As String sFileName = "C:WWW.xls" 'имя исходного файла sNewFileName = "WWW1.xls" 'имя файла для переименования 'создаем объект FileSystemObject Set objFSO = CreateObject("Scripting.FileSystemObject") 'проверяем наличие файла по указанному пути If objFSO.FileExists(sFileName) = False Then MsgBox "Нет такого файла", vbCritical, "www.excel-vba.ru" Exit Sub End If 'переименовываем файл Set objFile = objFSO.GetFile(sFileName) objFile.Name = sNewFileName MsgBox "Файл переименован", vbInformation, "www.excel-vba.ru" End Sub
Хочу обратить внимание, что при переименовании файла через FileSystemObject необходимо указать только имя нового файла — путь указывать не надо. Иначе получите ошибку.
Удаление файла
Sub Delete_File() Dim objFSO As Object, objFile As Object Dim sFileName As String sFileName = "C:WWW.xls" 'имя файла для удаления 'создаем объект FileSystemObject Set objFSO = CreateObject("Scripting.FileSystemObject") 'проверяем наличие файла по указанному пути If objFSO.FileExists(sFileName) = False Then MsgBox "Нет такого файла", vbCritical, "www.excel-vba.ru" Exit Sub End If 'удаляем файл Set objFile = objFSO.GetFile(sFileName) objFile.Delete MsgBox "Файл удален", vbInformation, "www.excel-vba.ru" End Sub
Точно так же можно перемещать, копировать и удалять целые папки:
Копирование папки
Sub Copy_Folder() Dim objFSO As Object Dim sFolderName As String, sNewFolderName As String sFolderName = "C:test" 'имя исходной папки sNewFolderName = "D:tmp" 'имя папки, в которую копируем(нужен слеш на конце) 'создаем объект FileSystemObject Set objFSO = CreateObject("Scripting.FileSystemObject") 'проверяем наличие папки по указанному пути If objFSO.FolderExists(sFolderName) = False Then MsgBox "Нет такой папки", vbCritical, "www.excel-vba.ru" Exit Sub End If 'копируем папку objFSO.CopyFolder sFolderName, sNewFolderName MsgBox "Папка скопирована", vbInformation, "www.excel-vba.ru" End Sub
Sub Move_Folder() Dim objFSO As Object Dim sFolderName As String, sNewFolderName As String sFolderName = "C:test" 'имя исходной папки sNewFolderName = "C:tmptest" 'имя папки, в которую перемещаем(нужен слеш на конце) 'создаем объект FileSystemObject Set objFSO = CreateObject("Scripting.FileSystemObject") 'проверяем наличие папки по указанному пути If objFSO.FolderExists(sFolderName) = False Then MsgBox "Нет такой папки", vbCritical, "www.excel-vba.ru" Exit Sub End If 'перемещаем папку objFSO.MoveFolder sFolderName, sNewFolderName MsgBox "Папка перемещена", vbInformation, "www.excel-vba.ru" End Sub
Sub Rename_Folder() Dim objFSO As Object, objFolder As Object Dim sFolderName As String, sNewFolderName As String sFolderName = "C:test" 'имя исходной папки 'имя папки для переименования(только имя, без полного пути) sNewFolderName = "new folder name" 'создаем объект FileSystemObject Set objFSO = CreateObject("Scripting.FileSystemObject") 'проверяем наличие папки по указанному пути If objFSO.FolderExists(sFolderName) = False Then MsgBox "Нет такой папки", vbCritical, "www.excel-vba.ru" Exit Sub End If 'переименовываем папку 'получаем доступ к объекту Folder(папка) Set objFolder = objFSO.GetFolder(sFolderName) 'назначаем новое имя objFolder.Name = sNewFolderName MsgBox "Папка переименована", vbInformation, "www.excel-vba.ru" End Sub
Sub Delete_Folder() Dim objFSO As Object, objFolder As Object Dim sFolderName As String sFolderName = "C:test" 'имя папки для удаления 'создаем объект FileSystemObject Set objFSO = CreateObject("Scripting.FileSystemObject") 'проверяем наличие папки по указанному пути If objFSO.FolderExists(sFolderName) = False Then MsgBox "Нет такой папки", vbCritical, "www.excel-vba.ru" Exit Sub End If 'удаляем папку objFSO.DeleteFolder sFolderName MsgBox "Папка удалена", vbInformation, "www.excel-vba.ru" End Sub
FSO, конечно, способен на большее — но цель данной статьи была показать основные операции с папками и файлами как стандартными методами, так и более продвинутыми.
Статья помогла? Поделись ссылкой с друзьями!
Видеоуроки
Поиск по меткам
Access
apple watch
Multex
Power Query и Power BI
VBA управление кодами
Бесплатные надстройки
Дата и время
Записки
ИП
Надстройки
Печать
Политика Конфиденциальности
Почта
Программы
Работа с приложениями
Разработка приложений
Росстат
Тренинги и вебинары
Финансовые
Форматирование
Функции Excel
акции MulTEx
ссылки
статистика
Содержание
- Метод CopyFolder
- Синтаксис
- Замечания
- См. также
- Поддержка и обратная связь
- CopyFile method
- Syntax
- Remarks
- See also
- Support and feedback
- CopyFolder method
- Syntax
- Remarks
- See also
- Support and feedback
- VBA Excel. Копирование и перемещение файлов
- Копирование файлов
- Метод CopyFile
- Синтаксис
- Параметры
- Примеры
- Excel VBA – Folder Operation – Exists, Create, Copy, Delete Directory
- Excel VBA – Create, Delete, Exists, Copy, Move, Open Folder Operation
- 1. VBA Code – Check if Folder Exists?
- 2. Excel VBA: Create/Delete Folder
- 3. Open Folder From Excel
- 4. Copy or Move Folder – Using Excel VBA
- Table1 – VBA Commands for Folder Operations:
- Table2 – VBA with FileSystemObject:
Метод CopyFolder
Рекурсивно копирует папку из одного места в другое.
Синтаксис
object. Источник CopyFolder , назначение, [ перезапись ]
Синтаксис метода CopyFolder состоит из следующих частей:
Part | Описание |
---|---|
object | Обязательно. Всегда имя объекта FileSystemObject. |
источник | Обязательно. Строка знаков, представляющая спецификацию папки, которая может содержать подстановочные знаки для одной или нескольких копируемых папок. |
destination | Обязательно. Строка знаков, определяющая место назначения, в которое должны быть скопированы папка и вложенные папки из source. Использование подстановочных знаков запрещено. |
Перезаписать | Необязательный параметр. Значение типа Boolean, показывающее, можно ли перезаписывать существующие папки. При значении True файлы перезаписываются, при значении False перезапись файлов не происходит. По умолчанию используется значение True. |
Замечания
Подстановочные знаки могут использоваться только в последнем компоненте пути аргумента source. Например, можно использовать:
Однако нельзя использовать:
Если источник содержит подстановочные знаки или назначение заканчивается разделителем пути (), предполагается, что назначение — это существующая папка, в которую копируются соответствующие папки и вложенные папки. В противном случае предполагается, что destination — это имя создаваемой папки. В любом случае при копировании отдельной папки могут произойти четыре вещи:
Если папка destination не существует, выполняется копирование папки source и всего ее содержимого. Это обычный случай.
Если destination является существующим файлом, происходит ошибка.
Если destination является каталогом, выполняется попытка скопировать папку и все ее содержимое. Если файл, содержащийся в source, уже существует в destination, возникает ошибка, если значение overwrite равно False. В противном случае будет выполнена попытка скопировать файл поверх существующего файла.
Если destination является каталогом только для чтения и значение overwrite равно False, при попытке скопировать в этот каталог существующий файл только для чтения возникает ошибка.
Ошибка также возникает, если значение source, заданное с использованием подстановочных знаков, не соответствует никаким папкам.
Метод CopyFolder останавливается при первой обнаруженной ошибке. Попытка отката изменений, выполненных до появления ошибки, не выполняется.
См. также
Поддержка и обратная связь
Есть вопросы или отзывы, касающиеся Office VBA или этой статьи? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь.
Источник
CopyFile method
Copies one or more files from one location to another.
Syntax
object.CopyFile source, destination, [ overwrite ]
The CopyFile method syntax has these parts:
Part | Description |
---|---|
object | Required. The object is always the name of a FileSystemObject. |
source | Required. Character string file specification, which can include wildcard characters, for one or more files to be copied. |
destination | Required. Character string destination where the file or files from source are to be copied. Wildcard characters are not allowed. |
overwrite | Optional. Boolean value that indicates if existing files are to be overwritten. If True, files are overwritten; if False, they are not. The default is True. Note that CopyFile will fail if destination has the read-only attribute set, regardless of the value of overwrite. |
Wildcard characters can only be used in the last path component of the source argument. For example, you can use:
But you can’t use:
If source contains wildcard characters, or destination ends with a path separator (****), it is assumed that destination is an existing folder in which to copy matching files. Otherwise, destination is assumed to be the name of a file to create. In either case, three things can happen when an individual file is copied:
If destination does not exist, source gets copied. This is the usual case.
If destination is an existing file, an error occurs if overwrite is False. Otherwise, an attempt is made to copy source over the existing file.
If destination is a directory, an error occurs.
An error also occurs if a source using wildcard characters doesn’t match any files. The CopyFile method stops on the first error it encounters. No attempt is made to roll back or undo any changes made before an error occurs.
Files copied to a new destination path will keep the same file name. To rename the copied file, simply include the new file name in the destination path. For example, this will copy the file to a new location and the file in the new location will have a different name:
See also
Support and feedback
Have questions or feedback about Office VBA or this documentation? Please see Office VBA support and feedback for guidance about the ways you can receive support and provide feedback.
Источник
CopyFolder method
Recursively copies a folder from one location to another.
Syntax
object.CopyFolder source, destination, [ overwrite ]
The CopyFolder method syntax has these parts:
Part | Description |
---|---|
object | Required. Always the name of a FileSystemObject. |
source | Required. Character string folder specification, which can include wildcard characters, for one or more folders to be copied. |
destination | Required. Character string destination where the folder and subfolders from source are to be copied. Wildcard characters are not allowed. |
overwrite | Optional. Boolean value that indicates if existing folders are to be overwritten. If True, files are overwritten; if False, they are not. The default is True. |
Wildcard characters can only be used in the last path component of the source argument. For example, you can use:
But you can’t use:
If source contains wildcard characters, or destination ends with a path separator (), it is assumed that destination is an existing folder in which to copy matching folders and subfolders. Otherwise, destination is assumed to be the name of a folder to create. In either case, four things can happen when an individual folder is copied:
If destination does not exist, the source folder and all its contents gets copied. This is the usual case.
If destination is an existing file, an error occurs.
If destination is a directory, an attempt is made to copy the folder and all its contents. If a file contained in source already exists in destination, an error occurs if overwrite is False. Otherwise, it will attempt to copy the file over the existing file.
If destination is a read-only directory, an error occurs if an attempt is made to copy an existing read-only file into that directory and overwrite is False.
An error also occurs if a source using wildcard characters doesn’t match any folders.
The CopyFolder method stops on the first error it encounters. No attempt is made to roll back any changes made before an error occurs.
See also
Support and feedback
Have questions or feedback about Office VBA or this documentation? Please see Office VBA support and feedback for guidance about the ways you can receive support and provide feedback.
Источник
VBA Excel. Копирование и перемещение файлов
Копирование и перемещение файлов в VBA Excel с помощью методов CopyFile и MoveFile объекта FileSystemObject. Синтаксис, параметры, примеры.
Копирование файлов
Метод CopyFile
Синтаксис
Параметры
Параметр | Описание |
---|---|
object | Переменная, возвращающая объект FileSystemObject. Обязательный параметр. |
source | Строковое выражение, задающее полное имя файла, который требуется скопировать в другое расположение. Для копирования нескольких файлов используются подстановочные знаки. Обязательный параметр. |
destination | Строковое выражение, задающее конечное расположение, куда требуется скопировать файл (файлы) из элемента source. Подстановочные знаки не допускаются. Обязательный параметр. |
overwrite | Логическое значение, которое указывает, требуется ли перезаписывать существующие файлы в конечном расположении. True – файлы будут перезаписаны, False – перезапись не выполняется. Необязательный параметр, по умолчанию – True. |
Если копируемый файл с полным именем source не существует, будет сгенерирована ошибка.
При копировании одного файла методом CopyFile допустимо в параметре destination указать другое собственное имя файла, тогда скопированный файл будет сохранен под новым именем. В том числе, можно изменить и расширение файла.
Примеры
Пример 1
Копирование одного файла в другое расположение с проверкой его существования:
Источник
Excel VBA – Folder Operation – Exists, Create, Copy, Delete Directory
Excel VBA – Create, Delete, Exists, Copy, Move, Open Folder Operation
Please enable JavaScript
Be it any operation on a system directory, like any of these:
- List Folder or check folder exists?
- Create/Delete Folder. (Table1)
- Copy or Move Folder. (Table2)
- Current working directory
- Get or Set file or folder attributes
- Open a folder from Excel
- and so on …
Yes. It is all possible from within the Excel vba code. You could also use the Quick reference Table below the code snippets.
And that is not the end. There is more examples as well …
Now, lets get some sample codes.
1. VBA Code – Check if Folder Exists?
There is inbuilt function within VBA class collection itself. Dir function can be used for this purpose.
If the folder exists already, then the Dir function will return the folder name. If it does not exist then it will return blank or spaces.
2. Excel VBA: Create/Delete Folder
Assume, we need to create a new folder in D: Drive after checking whether any folder with same name exists the path. We can do this with the following steps and code.
- Create a New Excel Workbook and Press Alt + F11.
- Then copy paste the below code and run it by pressing F5.
- A folder with name “TestFolder” will be created in D: Drive.
Note: In the VB Editor, type VBA.FileSystem (Do not copy paste, type this command), and it will display display the available functions for Folder or File operations.
Comments are provided inside the code to explain about each function used.
3. Open Folder From Excel
Now, we have created the TestFolder. IF we need to open the Folder from the code itself and want to display it in the desktop, use the below code.
In this code, an instance for the object “Shell.Application” is created and pass the Folder path for the .Open Function.
To perform advanced functions on Folders or File System in Windows, Google for File System Objects.
4. Copy or Move Folder – Using Excel VBA
This code used the commands from the Table2. Again, do not forget to add reference to Microsoft Scripting Runtime either thru early or late binding.
I guess, we have covered a lot more on this topic.
Table1 – VBA Commands for Folder Operations:
Command | Description | Syntax |
---|---|---|
Dir | 1. Widely used to check for folder or file existence. 2. Scans the directory path passed as parameter & returns the string that matches the pattern. |
VBA.Dir ( pathname [ ,attributes ] ) or VBA.FileSystem.Dir |
MkDir | Used to Create a New directory or Folder | MkDir (Path) |
RmDir | Delete a System folder or a directory | RmDir (Path) |
ChDir | Change Current working directory or Active folder | ChDir (Path) |
CurDir | Get current working or active windows directory | CurDir |
GetAttr | Get File or Folder Attributes. Returns the vbFileAttribute* | VBA.GetAttr (“File_Or_Folder_Path”) |
SetAttr | Change Attributes of a Folder or File. Hint: Hide a Folder or make it Read-Only |
VBA.SetAttr (“File_Or_Folder_Path”, vbFileAttribute*) |
Glossary | ||
* | vbFileAttribute | vbNormal(0) vbReadOnly(1) vbHidden(2) VbSystem(4) vbVolume(8) vbDirectory(16) vbArchive(32) vbAlias(64) |
Except for hide or lock folders, which is in a separate article, most processes are listed here.
Either you create a folder or delete already existing one, copy it to a new location, move, rename, open. All is possible right from within an Excel VBA macro code.
Table2 – VBA with FileSystemObject:
To use the Filesystemobject in VBA code, add reference to “Microsoft Scripting Runtime” Library.
Or create a late-binding object to this library with command ‘set fsp = CreateObject(“scripting.filesystemobject”)’
Command | Description | Syntax |
---|---|---|
CreateFolder | Create new folder | FileSystemObject.CreateFolder (Path) |
CopyFolder | Copy Folder from One location to another | FileSystemObject.CopyFolder (Source, Destination, [OverWriteFiles Flag]) |
MoveFolder | Move the File to different path | FileSystemObject.MoveFolder (Source, Destination, [OverWriteFiles Flag]) |
DeleteFolder | Delete Folder | FileSystemObject.DeleteFolder (Path) |
CreateTextFile | Copy File | CreateTextFile (Path) |
CopyFile | Copy File | CopyFile(Source,Destination) |
MoveFile | Move File | MoveFile(Source,Destination) |
DeleteFile | Delete File from specific path | DeleteFile(Path) |
This is not the complete list for Filesystemobject. There are more function to it that can read file content & do more processing.
We have listed only the required commands specific to the topic.
If any more reference is requires, please leave a comment. We will add good samples in our page.
Источник
The FileSystemObject VBA CopyFolder method copies one or more folders from one a source to a destination location.
VBA FileSystemObject Methods
- BuildPath
- CopyFile
- CopyFolder
- CreateFolder
- CreateTextFile
- DeleteFile
- DeleteFolder
- DriveExists
- FileExists
- FolderExists
- GetAbsolutePathName
- GetBaseName
- GetDrive
- GetDriveName
- GetExtensionName
- GetFile
- GetFileName
- GetFolder
- GetParentFolderName
- GetSpecialFolder
- GetTempName
- MoveFile
- MoveFolder
- OpenTextFile
VBA CopyFolder Syntax
fso.CopyFile source, destination, [ overwrite ]
source
The source location of the folders. You can use wildcards such as *.* to specify more than a single folder matching the pattern.
destination
The destination location (folder) where the source folders are to be copied to.
overwrite
Optional. If True will overwrite folders with same name in destination folder. If True it will omit folders for which there is an existing folder in the destination folder.
VBA CopyFolder Examples
Set fso = CreateObject("Scripting.FileSystemObject") 'Copy just the Hello folder fso.CopyFolder "c:SrcHello", "c:Dest" 'Copy all folders starting with "Names" title to destination folder fso.CopyFolder "c:SrcNames*", "c:Dest" 'Copy all folders to destination folder fso.CopyFolder "c:Src*", "c:Dest"