Excel vba копирование файлов по списку

Обновлено: 07.07.2024

Синтаксис оператора FileCopy содержит следующие именованные аргументы: The FileCopy statement syntax has these named arguments:

Часть Part Описание Description
source source Обязательно. Required. Строковое выражение, которое задает имя копируемого файла. String expression that specifies the name of the file to be copied. Элемент source может включать каталог или папку и диск. The source may include directory or folder, and drive.
destination destination Обязательно. Required. Строковое выражение, которое задает имя целевого файла. String expression that specifies the target file name. Элемент destination может включать каталог или папку и имя. The destination may include directory or folder, and drive.

Примечания Remarks

Если вы попытаетесь использовать оператор FileCopy для открытого в данный момент файла, возникнет ошибка. If you try to use the FileCopy statement on a file that is currently open, an error occurs.

Пример Example

В этом примере оператор FileCopy используется для копирования одного файла в другой файл. This example uses the FileCopy statement to copy one file to another. В этом примере предполагается, что файл содержит некоторые данные. For the purposes of this example, assume that the file contains some data.

См. также See also

Поддержка и обратная связь Support and feedback

Есть вопросы или отзывы, касающиеся Office VBA или этой статьи? Have questions or feedback about Office VBA or this documentation? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь. Please see Office VBA support and feedback for guidance about the ways you can receive support and provide feedback.

Имеется excel лист, где указаны: -список файлов -полное имя файла ( ххх. pdf) -расположения файла в диске (C://xxx/xxxx/xxx.pdf) -расположения папок, куда каждый файл должен быть скопирован (C://zzz/zzzz/zz)

Как можно эти файлы скопировав распределить по указанным в листе папкам?

2 ответа 2


Оператор FileCopy поможет:

Всего одна строка, но перед ней. Нужно копировать много файлов да по разным адресам, обойти ошибки, получить имя файла из полного пути.


Примечание: наличие диска не проверяется. Если диск (например F) отсутсствует, получим ошибку. Если такое не исключается, нужно дописать проверку:

Всё ещё ищете ответ? Посмотрите другие вопросы с метками excel vba или задайте свой вопрос.

Похожие

Для подписки на ленту скопируйте и вставьте эту ссылку в вашу программу для чтения RSS.

дизайн сайта / логотип © 2019 Stack Exchange Inc; пользовательское содержимое попадает под действие лицензии cc by-sa 4.0 с указанием ссылки на источник. rev 2019.11.15.35459

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

Имя Категория Назначение
ChDir Оператор Изменяет текущий каталог
ChDrive Оператор Изменяет текущий драйвер диска
CurDir Функция Возвращает текущий каталог
Dir Функция Возвращает имя каталога или файла, совпадающее с определенным именем файла, передаваемым как строковый аргумент. Предназначена для нахождения одного или нескольких файлов на диске.
FileCopy Оператор Копирует файл
FileDateTime Функция Возвращает значение типа Date, содержащее дату и время, когда этот файл был изменен последний раз.
FileLen Функция Возвращает длину файла в байтах
GetAttr Функция Возвращает число, представляющее объединенные атрибуты файла или каталога диска, такие как System, Hidden и т.д.
GetOpenFileName Метод Отображает Excel-диалоговое окно Open и возвращает имя файла, выбранное пользователем. В Word не имеется.
GetSaveAsFileName Метод Отображает Excel-диалоговое окно Save As и возвращает имя файла, выбранное пользователем. В Word не имеется.
Kill Оператор Удаляет файлы с драйвера диска.
MkDir Оператор Создает каталог диска.
Name Оператор Переименовывает или перемещает файл.
RmDir Оператор Удаляет каталог диска.
SetAttr Оператор Устанавливает атрибуты файла.

Операторы, функции и объектные методы, имеющиеся в VBA, делятся на шесть различных функциональных частей:

Простой и удобный инструмент для управления файлами прямо из приложения Excel, который позволяет создать список из файлов заданных папок, быстро копировать и перемещать файлы из одних папок в другие, переименовывать и удалять файлы по списку.

Все что для этого нужно – это приложение Excel с поддержкой языка программирования VBA (Visual Basic for Application) и надстройка, написанная на этом языке. Для осуществления действий с файлами, в диалоговом окне надстройки необходимо выбрать одну из доступных опций и указать диапазоны ячеек с полными именами файлов. Полным именем файла называется путь к этому файлу вместе с именем файла, включая расширение, например C:\Program Files\7-Zip\7z.exe

управление файлами из excel

Создание списка файлов

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

Для удобства последующей обработки файлов, при формировании списка можно использовать дополнительные возможности, такие как: нумерация позиций списка, подстановка гиперссылок, вывод дат создания файлов, а также вывод размеров файлов.

Копирование файлов

При копировании файлов необходимо иметь два списка полных имен, список со старыми именами и список с новыми именами. Старые имена – это текущие полные имена файлов, а новые имена – это имена файлов, но уже в новой папке, либо в новых папках, если папки разные. Например, чтобы скопировать файл «7z.exe» из папки C:\Program Files\7-Zip в папку D:\Program Files\7-Zip необходимо в одном списке указать старое имя C:\Program Files\7-Zip\7z.exe, а в другом – новое имя D:\Program Files\7-Zip\7z.exe. При этом изменяться может не только имя диска, а любая папка или несколько папок. Главное, чтобы все эти папки физически существовали на заданном диске.

В результате копирования исходные файлы остаются на своих местах, а их копии появляются в заданных папках. В случае, если кроме путей к файлам изменяются и имена файлов, то происходит одновременное копирование и переименование файлов.

Перемещение файлов

Перемещение файлов производится аналогично копированию, с той лишь разницей, что исходных файлов в исходных папках не остается, они перемещаются по новым адресам. Если в списке с новыми именами изменить и пути и имена, то одновременно с перемещением происходит и переименование файлов. В случае если пути остаются неизменными, а имена меняются, то происходит переименование файлов.

Удаление файлов

При удалении файлов список с новыми именами не требуется. Выделяется диапазон ячеек со старыми полными именами файлов и после пуска программы файлы этого списка удаляются. При этом к данной операции следует относиться с особой осторожностью, так как восстановить удаленные файлы из корзины не удастся.

В этой статье я хотел бы рассказать как средствами VBA переименовать, переместить или скопировать файл. В принципе методы переименования, перемещения и копирования, так сказать, встроены в VBA. Это значит что можно без вызова сторонних объектов переименовать, переместить или копировать любой файл. Все это делается при помощи всего двух команд: FileCopy и Name [Исходный файл] As [Новый файл] . Притом команда FileCopy выполняет только копирование, а Name [Исходный файл] As [Новый файл] - как переименование, так и перемещение. Разница лишь в том, что при переименовании мы указываем только новое имя файла, а при перемещении - другую директорию(папку), в которую следует переместить файл. Плюс рассмотрим пример удаления файла.
Так же разберем методы копирования, перемещения, переименования и удаления файлов и папок через библиотеку FileSystemObject (FSO).

Работа с файлами встроенными командами VBA

Работа с файлами через объект FileSystemObject (FSO)

Работа с папками через объект FileSystemObject (FSO)

Во всех примерах работы с файлами встроенными функциями будет присутствовать проверка на наличие файла по указанному пути. Делать это будем при помощи встроенной функции Dir([PathName],[Attributes]) .
PathName - указывается полный путь к файлу
Attributes - указывается признак свойств файла. Вообще их несколько(скрытый, архивный и т.п.), но нас для наших задач будет интересовать пока только один: 16(vbDirectory). Он отвечает за проверку папок и файлов без специальных свойств(т.е. не архивные, не скрытые и т.д.). Хотя по сути его можно вообще не указывать, и тогда будет по умолчанию применен атрибут 0(vbNormal) - проверка файлов без определенных свойств. Ни в том ни в другом случае ошибкой это не будет.

Как видно ничего сложного.

Так же можно проделать те же операции с файлами при помощи объекта 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(именно этот способ используется мной в примерах ниже). Методы таким образом просмотреть не получится, но зато работать будет без проблем на любых компьютерах без дополнительных действий.

Хочу обратить внимание, что при переименовании файла через FileSystemObject необходимо указать только имя нового файла - путь указывать не надо. Иначе получите ошибку.

Точно так же можно перемещать, копировать и удалять целые папки:

FSO, конечно, способен на большее - но цель данной статьи была показать основные операции с папками и файлами как стандартными методами, так и более продвинутыми.


Есть много способов скопировать или переместить файл из одной папки в другую. Мы можем сделать это вручную, скопировав и вырезав значок файла и вставив его в папку назначения. Но когда дело доходит до автоматизации этого процесса копирования файла, мы можем сделать это и в VBA. Чтобы скопировать файл, у нас есть функция, доступная в VBA, которая называется «Копирование файла».

Синтаксис FileCopy в Excel VBA

Применить File Copy в VBA очень легко. Синтаксис File Copy выглядит так, как показано ниже.


File Copy имеет только два компонента для подачи. Которые:

  • Источник - Здесь мы разместим исходное местоположение, откуда нам нужно скопировать файл.
  • Назначение - и это будет папка назначения, в которую мы будем вставлять скопированный файл.

Полный синтаксис будет в типе String. Потому что мы будем использовать путь к файлу, который будет в виде текста.

Как скопировать файл в Excel VBA?

Теперь давайте попробуем с некоторыми примерами копирования файлов VBA в Excel.

Вы можете скачать этот VBA Скопировать файл Excel шаблон здесь - VBA Скопировать файл Excel шаблон

Пример № 1 - FileCopy в VBA

В первом примере мы увидим, как скопировать файл из исходного местоположения и вставить его в место назначения очень простым способом.

Для этого нам понадобится файл любого вида или расширения. Здесь мы рассматриваем файл Excel с расширением xlsx . Как мы видим, мы поместили этот файл Excel в папку, которая легко доступна и называется Test .


Теперь мы скопируем этот файл с помощью FileCopy в указанную ниже папку назначения.


Шаг 1: Для этого перейдите в VBA и откройте раскрывающийся список «Модуль из вставки», как показано ниже.


Шаг 2: Теперь в открытом модуле напишите подкатегорию VBA FileCopy или любое другое имя по вашему выбору.

Код:


Шаг 3: Теперь откройте функцию FileCopy, как показано ниже.

Код:


Шаг 4: Теперь в кавычках напишите адрес местоположения источника, а затем имя и расширение файла, как показано ниже.

Код:


Шаг 5: В качестве места назначения снова поместите путь в кавычки, затем файл и расширение.

Код:


Шаг 6: Теперь скомпилируйте код и запустите его, нажав на кнопку Play, которая находится под строкой меню. Мы увидим, что файл Excel с именем Test теперь копируется из исходного местоположения в местоположение назначения, как показано ниже. Поскольку в файле ничего не было, размер файла равен 0 КБ .


Пример №2 - FileCopy в VBA

В другом примере мы увидим, как скопировать файл из исходного местоположения в место назначения, определив переменную. Этот процесс немного длительный, но более надежный, так как мы будем фиксировать параметры и переменные.

Шаг 1: Теперь сначала откройте новый модуль и напишите подкатегорию VBA File Copy, как показано ниже.

Код:


Шаг 2: Сначала определите переменную, в которую мы будем помещать исходное местоположение файла того же файла Excel, который мы использовали в примере-1 в качестве String.

Код:


Шаг 3: Аналогичным образом, нам понадобится еще одна переменная для места назначения.

Код:


Шаг 4: Теперь поместите местоположение в первую определенную переменную, которая является « FirstLocation » вместе с именем файла и его расширением.

Код:


Шаг 5: Аналогичным образом сделайте то же самое для местоположения пункта назначения, используя переменную « SecondLocation», которую мы определили выше.

Код:


Шаг 6: Теперь пришло время использовать функцию FileCopy .

Код:


В соответствии с синтаксисом FileCopy, во-первых, мы должны указать местоположение источника, где мы сохранили файл. Но, как мы уже определили выше, исходные и целевые папки для обеих переменных.

Шаг 7: Итак, здесь мы можем напрямую выбрать эти переменные. Сначала выберите переменную местоположения источника, которая является FirstLocation .

Код:


Шаг 8: Снова аналогичным образом выберите переменную места назначения, которая является SecondLocation, как показано ниже.

Код:


Шаг 9: После этого мы скомпилируем код, нажав функциональную клавишу F8. И если ошибки не найдены, запустите код. Мы увидим, что файл из исходного местоположения копируется и вставляется в папку назначения, как показано ниже.


Мы можем попробовать другой путь. Для теста давайте рассмотрим другое местоположение источника, где у нас будет файл слова.

Как мы видим, в файле нет данных, поэтому размер снова отображается как 0 КБ.


И целевой папкой будет папка «Расположение вывода», которая находится в папке «Расположение ввода». Если мы видим внутри файла, нет доступных данных.


Теперь мы заменим источник и назначение в переменных FirstLocation и Second Location соответственно, за которыми следуют имя файла и его расширение.

Код:


Теперь запустите код.

Мы увидим, что файл Test word теперь копируется из папки Input Location в папку Output location с тем же размером, который равен 0 КБ.


Плюсы FileCopy в VBA

  • Может использоваться для копирования более 1 файла за один снимок.
  • Для 10 файлов требуется примерно столько же времени, сколько для копирования одного файла.
  • Мы можем использовать любой тип файла расширения, который мы хотим скопировать.

То, что нужно запомнить

  • Всегда ставьте имя файла и его расширение в конце имени местоположения.
  • Заключите в кавычки ссылки места назначения и источника.
  • После этого сохраните код в макросе, чтобы Excel смог использовать и сохранить код для будущих целей.
  • Всегда предоставляйте разрешение на код, чтобы он мог скопировать файл из исходного расположения и вставить его в место назначения.

Рекомендуемые статьи

Это руководство по FileCopy в VBA. Здесь мы обсуждаем, как скопировать файл Excel с использованием кода VBA, а также с практическими примерами и загружаемым шаблоном Excel. Вы также можете просмотреть наши другие предлагаемые статьи -

Читайте также: