Vba excel копирование папки

Создание, копирование, перемещение и удаление папок в 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
Регистрация: 26.06.2016

Всем привет! подскажите  пожалуйста  как скопировать одну папку(folder1) со всем содержимым из одного каталога в другой с переименованием т.е. конечная папка будет называться folder2
в исходной папке (folder1) файлы двух типов .xlsx и  .txt  если это упростит задачу
Заранее огромное спасибо!  

 

Roman Shaleyko

Пользователь

Сообщений: 31
Регистрация: 03.01.2015

#2

25.09.2016 20:30:05

VBS скрипт:

Код
Option Explicit
Dim outFolder: outFolder = "C:TEST"
Dim inFolder: inFolder = "\Server"
Dim oFSO: Set oFSO = CreateObject("Scripting.FileSystemObject")
Dim WSNetwork: Set WSNetwork = CreateObject("WScript.Network")
 
If oFSO.FolderExists(outFolder) AND oFSO.FolderExists(inFolder) Then
  CopyFileOnMask outFolder, "exe txt rar" ' каталог и маски файлов для копирования
  WScript.Echo "Готово."
Else
  WScript.Echo "Не найден один из путей " & outFolder & " " & "ИЛИ" & " " & inFolder
End If
WScript.Quit(0)
 
Function CopyFileOnMask(s, sMask)
  Dim oFld, iFld, arrMask, v, i, num
  num = 0
  Set oFld = oFSO.GetFolder(s)
  Set iFld = oFSO.GetFolder(inFolder)
  arrMask = Split(LCase(sMask), " ")
  For Each v In oFld.Files
    For i = LBound(arrMask) To UBound(arrMask)
      If LCase(oFSO.GetExtensionName(s & "" & v.Name)) = arrMask(i) Then
        v.Copy(iFld & "" & v.Name), True
      num = num + 1
      'oFSO.CopyFile v, iFld & v.Name, True
        Exit For
      End If
    Next
  Next
  If Err.Number Then
WScript.Echo "Обновление прошло с ошибками. Сообщите об этом администратору."
else
WScript.Echo "Обновление прошло успешно. Скопировано " & num & " файлов."
Err.Clear
End if
End Function
 

Ігор Гончаренко

Пользователь

Сообщений: 13746
Регистрация: 01.01.1970

#3

25.09.2016 21:26:29

мне удалось получить копию папки C:Dell с именем C:Dell2

Код
Sub CopyFolder()
  Dim fso
  Set fso = CreateObject("scripting.filesystemobject"):  fso.CopyFolder "c:dell", "c:dell2"
End Sub

Изменено: Ігор Гончаренко25.09.2016 21:27:34

Программисты — это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!

 

Karataev

Пользователь

Сообщений: 2306
Регистрация: 23.10.2014

#4

25.09.2016 21:36:50

Ігор Гончаренко, да Ваш способ работает. Изменил свой код по мотивам вышерасположенного поста.
Вариант со сторонней библиотекой (Scripting.FileSystemObject), в самом VBA нужно делать много действий.

Код
Sub Скопировать_папку()
    
    Dim fso As Object
    
    Set fso = CreateObject("Scripting.FileSystemObject")
    On Error Resume Next
        fso.DeleteFolder "C:UsersUserDesktopПапкаПапка 2", True
    On Error GoTo 0
    fso.CopyFolder "C:UsersUserDesktopПапка 1", "C:UsersUserDesktopПапкаПапка 2"
    
End Sub

Изменено: Karataev25.09.2016 21:38:16

 

roneta90

Пользователь

Сообщений: 27
Регистрация: 26.06.2016

#5

27.09.2016 00:15:33

с простым копирование получилось . чтобы не плодить темы сразу в этой опишу полную задачу(хотела сама допилить но чо то не получается) : нужно скопировать три папки с датами 20160924 20160925 20160926  из папки user в папку main с именами 20160924n  и т.д. (n — это не переменная это часть имени папки) пользуюсь вот таким циклом

Код
Sub FileChecker()
Dim r As Long
'NACHALO CICLA PROVRKI NALICHIYA PAPKI
For r = 2 To Cells(Rows.Count, 3).End(xlUp).Row
Dim fso
Cells(r, 4) = Dir(Cells(1, 3) & Cells(r, 3))
'COPIRUY FAIL
Set fso = CreateObject("scripting.filesystemobject"): fso.CopyFolder "C:userr", "c:mainr & _n"
'r - peremenaya' 'r & _n - imya konechnoy papki, naprimer 20160924_n
Sheets("BASE").Select
Next 'perehod k PROVRKe NALICHIYA sledyuschei PAPKI
End Sub

названия берутся из файла( см влож) на листе»base» столбец  С начиная со второй ячейки. при выполнении пишет Path not found . я так понимаю папку не находит хотя пути я перепроверяла 100 раз может чо то неправильно в тексте. Там в столбце С название папок прописаны в формате даты может это оказывает влияние

Прикрепленные файлы

  • control desk.xlsm (15.47 КБ)

Изменено: roneta9027.09.2016 00:35:04

 

Karataev

Пользователь

Сообщений: 2306
Регистрация: 23.10.2014

Я изменил в столбце «C» формат ячеек, а чтобы даты были в нужном виде, вставил формулу. Иначе у Вас в столбце «C» фактически был не текст вида 20160925, а были числа (это можно было увидеть, если изменить формат ячеек на «Общий»). И макрос не мог найти нужную папку, т.к. у Вас имена папок вида «20160925», а в столбце «C» числа.

В функции «Dir» я добавил параметр «vbDirectory». Его нужно использовать, если нужно работать с папками.

 

roneta90

Пользователь

Сообщений: 27
Регистрация: 26.06.2016

#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 с результатом выполнения копирования ПАПОК

Код
Option Explicit
Sub FileChecker()
Dim sFileName As String, sNewFileName As String
Dim sh As Worksheet, fso As Object, r As Long
    
    Set sh = Sheets("BASE")
    Set fso = CreateObject("Scripting.FileSystemObject")
    
    'NACHALO CICLA PROVRKI NALICHIYA PAPKI
    For r = 2 To sh.Cells(sh.Rows.Count, 3).End(xlUp).Row
        sh.Cells(r, "D") = Dir(sh.Cells(1, "C") & sh.Cells(r, "C"), vbDirectory)
        'COPIRUY FAIL
        If sh.Cells(r, "D") <> "" Then
            'r - peremenaya' 'r & _n - imya konechnoy papki, naprimer 20160924_n
            fso.CopyFolder sh.Cells(1, "C") & sh.Cells(r, "C") & "PS1", "c:main" & sh.Cells(r, "C")
            fso.CopyFolder sh.Cells(1, "C") & sh.Cells(r, "C") & "PS2", "c:main" & sh.Cells(r, "C") & "_n"
        End If
 
 sFileName = sh.Cells(1, "G") & sh.Cells(r, "C") & "RS_RUS_EP747*.TXT"    'имя файла для копироваия
 sNewFileName = sh.Cells(1, "G") & sh.Cells(r, "C") & "_n" & "RS_RUS_EP747.TXT"     'имя конечного файла я переименовала его но это не важно как он в итоге будет назваться'
  If Dir(sFileName, 16) = "" Then MsgBox "нет такого файла", vbCritical, "ошибка": Exit Sub
  FileCopy sFileName, sNewFileName 'копирую
  MsgBox "файл скопирован", vbInformation
Next 'perehod k PROVRKe NALICHIYA sledyuschei PAPKI
End Sub

Прикрепленные файлы

  • РЕЗУЛЬТАТ КОПИРОВАНИЯ.rar (16.56 КБ)

Изменено: roneta9029.09.2016 21:04:15

 

Doober

Пользователь

Сообщений: 2204
Регистрация: 09.04.2013

#8

29.09.2016 03:00:11

У вас ячейка пустая  sh.Cells(1, «H»)  

Код
 sNewFileName = sh.Cells(1, "H") & sh.Cells(r, "C") & "_n" & "RS_RUS_EP747_N.TXT"  

<#0>

 

Hugo

Пользователь

Сообщений: 23251
Регистрация: 22.12.2012

#9

29.09.2016 08:39:21

А звёздочка то ведь не работает!

Код
FileCopy "C:Downloadsinf*.pdf", "C:Downloadsinfo2.pdf"
 

roneta90

Пользователь

Сообщений: 27
Регистрация: 26.06.2016

#10

29.09.2016 21:03:51

Цитата
Hugo написал: А звёздочка то ведь не работает!

я пробовала прописывать название файла без звездочки т.е. полностью такая же фигня и в ячейке   sh.Cells(1, «H») исправила  на sh.Cells(1, «G»)

 

lke

Пользователь

Сообщений: 1
Регистрация: 25.10.2017

#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
ссылки
статистика

Содержание

  1. Метод CopyFolder
  2. Синтаксис
  3. Замечания
  4. См. также
  5. Поддержка и обратная связь
  6. CopyFile method
  7. Syntax
  8. Remarks
  9. See also
  10. Support and feedback
  11. CopyFolder method
  12. Syntax
  13. Remarks
  14. See also
  15. Support and feedback
  16. VBA Excel. Копирование и перемещение файлов
  17. Копирование файлов
  18. Метод CopyFile
  19. Синтаксис
  20. Параметры
  21. Примеры
  22. Excel VBA – Folder Operation – Exists, Create, Copy, Delete Directory
  23. Excel VBA – Create, Delete, Exists, Copy, Move, Open Folder Operation
  24. 1. VBA Code – Check if Folder Exists?
  25. 2. Excel VBA: Create/Delete Folder
  26. 3. Open Folder From Excel
  27. 4. Copy or Move Folder – Using Excel VBA
  28. Table1 – VBA Commands for Folder Operations:
  29. 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:

  1. List Folder or check folder exists?
  2. Create/Delete Folder. (Table1)
  3. Copy or Move Folder. (Table2)
  4. Current working directory
  5. Get or Set file or folder attributes
  6. Open a folder from Excel
  7. 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.

  1. Create a New Excel Workbook and Press Alt + F11.
  2. Then copy paste the below code and run it by pressing F5.
  3. 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" 

Like this post? Please share to your friends:
  • Vba excel копирование несвязанных диапазонов
  • Vba excel копирование на один лист
  • Vba excel копирование листа в новую книгу
  • Vba excel копирование значения ячейки
  • Vba excel копирование диапазона ячеек с одного листа на другой