Копирование файлов vba excel
Копирует один или несколько файлов из одного расположения в другое.
Синтаксис
объект. CopyFile источник, назначения, [ переписать ]
Синтаксис метода CopyFile содержит следующие элементы:
Part | Описание |
---|---|
object | Обязательный. Объект всегда является именем FileSystemObject. |
source | Обязательный. Спецификация файла строки символов, которая может содержать подстановочные знаки (для одного или нескольких копируемых файлов). |
destination | Обязательный. Символьное строковое обозначение конечного расположения, в которое необходимо скопировать файл или файлы из элемента source. Использование подстановочных знаков не допускается. |
переописывание | Необязательное. Логическое значение, которое указывает, требуется ли перезапись существующих файлов. Если установлено значение True, файлы будут перезаписаны; если задано значение False, перезапись не выполняется. По умолчанию используется значение True. Необходимо учитывать, что функция CopyFile не выполняется, если для элемента destination установлено свойство "только чтение", независимо от значения элемента overwrite. |
Примечания
Подстановочные знаки могут использоваться только в последнем компоненте пути аргумента source. Например, можно использовать:
Однако нельзя использовать:
Если источник содержит символы под диктовки или заканчивается сепаратором пути (* ), предполагается, что назначение — это существующая папка, в которой можно скопировать * совпадающие файлы. В противном случае элемент, destination предположительно является именем создаваемого файла. В любом случае при копировании отдельного файла могут произойти три вещи:
Если элемент destination не существует, выполняется копирование элемента source. Это типичный случай.
Если элемент destination представляет собой существующий файл, возникает ошибка, если элементу overwrite присвоено значение False. В противном случае выполняется попытка копирования элемента source в существующий файл.
Если destination является каталогом, происходит ошибка.
Ошибка также возникает в том случае, если элемент source, который использует подстановочные знаки, не соответствует ни одному из файлов. Выполнение метода CopyFile останавливается при обнаружении первой ошибки. До возникновения ошибки попыток отката или отмены каких-либо изменений не выполняется.
Файлы, скопированные на новый путь назначения, будут хранить одно и то же имя файла. Чтобы переименовать скопированные файлы, просто включив новое имя файла в путь назначения. Например, это скопирует файл в новое расположение, а у файла в новом расположении будет другое имя:
См. также
Поддержка и обратная связь
Есть вопросы или отзывы, касающиеся Office VBA или этой статьи? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь.
В этой статье я хотел бы рассказать как средствами 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. Вы также можете просмотреть наши другие предлагаемые статьи -
Подобно функции листа в Excel, мы также можем копировать данные вставки или набор значений в VBA. В обычных данных мы используем CTRL + C, чтобы скопировать выборку данных, а затем CTRL + V, чтобы вставить выбранные данные в целевую ячейку. Но то же самое в VBA делают определенные коды, которые мы узнаем в этой статье.
Как мы используем копирование и вставку в Excel VBA? Для этого сначала нам нужно активировать целевой лист или рабочую книгу, из которой мы хотим скопировать любой диапазон данных, и этот выбор копируется определенным кодом, когда этот выбор успешно скопирован, мы можем продолжить и вставить данные в целевой диапазон ячеек.
Синтаксис для копирования данных в VBA выглядит следующим образом:
Теперь синтаксис для вставки данных в другой лист или в любой другой диапазон ячеек выглядит следующим образом:
Мы используем оператор Dot (.) Для использования методов копирования и вставки в VBA.
Мы можем скопировать весь столбец и вставить его в другой столбец, а также мы также можем скопировать всю строку и вставить ее в другую строку. Мы узнаем все это в этой статье.
Примечание. Чтобы использовать VBA в Excel, убедитесь, что вкладка «Разработчик» включена из вкладки «Файл», а затем в раздел настроек параметров.
Как использовать Excel VBA Copy Paste?
Мы научимся использовать VBA Copy Paste с несколькими примерами в Excel.
Вы можете скачать этот шаблон VBA Copy Paste Excel здесь - Шаблон VBA Copy Paste Excel
VBA Copy Paste - Пример № 1
Для демонстрации у меня есть случайное значение в ячейке A1, которое я хочу скопировать и вставить в ячейку B1, используя код VBA. Посмотрите, какие данные находятся в ячейке A1, а ячейка B1 пуста.
Выполните следующие шаги, чтобы использовать Excel VBA Copy Paste:
Шаг 1: Перейдите на вкладку разработчика и нажмите на Visual Basic, чтобы открыть VB Editor.
Шаг 2: Как только редактор VB откроется, нажмите на кнопку вставки, а затем на кнопку Вставить модуль, чтобы вставить окно кода.
Шаг 3: Объявите подфункцию, чтобы начать писать код.
Код:
Шаг 4. Сначала активируйте лист, чтобы использовать свойства листа с помощью следующего кода.
Код:
Шаг 5: Скопируйте данные, которые находятся в ячейке A1, с помощью следующего кода.
Код:
Шаг 6: Теперь вставьте скопированные данные в целевую ячейку, которая является ячейкой B1, с помощью следующего кода.
Код:
Шаг 7: Запустите приведенный выше код с помощью кнопки запуска и посмотрите результат в ячейке B1.
VBA Copy Paste - Пример №2
У меня есть данные в столбце C, и я хочу скопировать все данные или значения и вставить их в столбец D, используя код VBA. Посмотрите ниже, что это за данные в столбце C, и что столбец D пуст.
Выполните следующие шаги, чтобы использовать Excel VBA Copy Paste:
Шаг 1: Перейдите на вкладку разработчика и нажмите на Visual Basic, чтобы открыть VB Editor.
Шаг 2: Нажмите на вставленный модуль, чтобы открыть окно кода,
Шаг 3: Объявите подфункцию, чтобы начать писать код.
Код:
Шаг 4. Сначала активируйте рабочий лист с помощью следующего кода.
Код:
Шаг 5: Скопируйте данные в столбце C с помощью следующего кода.
Код:
Шаг 6: Теперь, чтобы вставить данные в столбец D, используйте следующий код.
Код:
Шаг 7: Запустите следующий код с помощью кнопки запуска или нажмите F5.
Запустите код, чтобы увидеть следующий результат.
VBA Copy Paste - Пример № 3
Теперь для этого примера у меня есть целый диапазон данных в диапазоне ячеек G1: H3, и я хочу скопировать данные в диапазоне ячеек I1: J3. Посмотрите ниже на данные, которые у меня есть в диапазоне ячеек G1: H3, а диапазон ячеек I1: J3 пуст.
Выполните следующие шаги, чтобы использовать Excel VBA Copy Paste:
Шаг 1: Перейдите на вкладку разработчика и нажмите на Visual Basic, чтобы открыть VB Editor.
Шаг 2: Нажмите на вставленный модуль, чтобы открыть окно кода,
Шаг 3: Объявите подфункцию, чтобы начать писать код.
Код:
Шаг 4. Сначала активируйте лист, чтобы использовать его свойства с помощью следующего кода.
Код:
Шаг 5: Скопируйте данные в целевой диапазон ячеек с помощью следующего кода.
Код:
Шаг 6: Теперь, чтобы вставить данные в ячейку назначения, используйте следующий код.
Код:
Шаг 7: Запустите приведенный выше код с помощью кнопки запуска или нажмите F5, чтобы увидеть следующий результат.
VBA Copy Paste - пример № 4
Для этого примера у меня есть данные в строке 10, и я хочу вставить данные в строке 11. Посмотрите ниже, чтобы увидеть, какие данные находятся в строке 10, а строка 11 свободна.
Выполните следующие шаги, чтобы использовать Excel VBA Copy Paste:
Шаг 1: Перейдите на вкладку разработчика и нажмите на Visual Basic, чтобы открыть VB Editor.
Шаг 2: Нажмите на вставленный модуль, чтобы открыть окно кода,
Шаг 3: Объявите подфункцию, чтобы начать писать код.
Код:
Шаг 4. Активируйте рабочий лист, чтобы использовать свойства рабочего листа.
Код:
Шаг 5: Скопируйте строку 10 со следующим кодом.
Код:
Шаг 6: Вставьте данные строки 10 в строку 11 с помощью следующего кода.
Код:
Шаг 7: Запустите приведенный выше код, нажав F5, чтобы увидеть следующий результат.
То, что нужно запомнить
- Чтобы использовать данные из любого листа для их копирования, нам нужно сначала активировать лист.
- Точно так же, когда нам нужно вставить данные в любой другой лист в VBA, нам нужно сначала активировать целевой лист.
- Если мы копируем весь столбец или строку и вставляем данные в любой другой столбец, тогда данные в любом месте строки или столбца в целевых ячейках копируются и вставляются в целевые ячейки. Это может привести к определенным нежелательным данным.
- Лучший способ скопировать данные - скопировать определенный диапазон и вставить данные в целевые ячейки.
Рекомендуемые статьи
Это было руководство к VBA Copy Paste. Здесь мы обсудили, как использовать Excel VBA Copy paste, а также некоторые практические примеры и загружаемый шаблон Excel. Вы также можете просмотреть наши другие предлагаемые статьи -
Читайте также: