Копировать файлы VBA Excel

Обновлено: 21.11.2024

Копирует один или несколько файлов из одного места в другое.

Синтаксис

объект.CopyFile источник, назначение, [ перезаписать ]

Синтаксис метода CopyFile состоит из следующих частей:

< /th>

Примечания

Подстановочные знаки можно использовать только в последнем компоненте пути аргумента source. Например, вы можете использовать:

Но вы не можете использовать:

Если источник содержит подстановочные знаки или назначение заканчивается разделителем пути (****), предполагается, что назначение существующая папка, в которую следует скопировать соответствующие файлы. В противном случае предполагается, что назначение — это имя создаваемого файла. В любом случае при копировании отдельного файла могут произойти три вещи:

Если назначение не существует, копируется источник. Это обычный случай.

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

Если назначение является каталогом, возникает ошибка.

Ошибка также возникает, если источник, использующий подстановочные знаки, не соответствует ни одному файлу. Метод CopyFile останавливается при первой обнаруженной ошибке. Не предпринимается никаких попыток откатить или отменить какие-либо изменения, сделанные до возникновения ошибки.

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

См. также

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

Есть вопросы или отзывы об Office VBA или этой документации? См. раздел Поддержка и отзывы об Office VBA, чтобы узнать, как получить поддержку и оставить отзыв.

Копирует лист в другое место в текущей книге или в новую книгу.

Синтаксис

выражение. Копировать (До, После)

выражение Переменная, представляющая объект Worksheet.

Параметры

Часть Описание
object Обязательный. object всегда является именем FileSystemObject.
source< /td> Обязательно. Спецификация файла строки символов, которая может включать подстановочные знаки, для одного или нескольких копируемых файлов.
destination Обязательно. Пункт назначения строки символов, куда необходимо скопировать файл или файлы из источника. Подстановочные знаки не допускаются.
перезаписать Необязательно. Логическое значение, указывающее, следует ли перезаписывать существующие файлы. Если True, файлы перезаписываются; если False, это не так. Значение по умолчанию — Истина. Обратите внимание, что функция CopyFile завершится ошибкой, если атрибут destination установлен только для чтения, независимо от значения параметра overwrite.
Имя Обязательный/Необязательный Тип данных Описание
До Необязательно Вариант Лист, перед которым будет размещен скопированный лист. Вы не можете указать До, если вы укажете После.
После Необязательно Вариант Лист, после которого будет размещен скопированный лист. Вы не можете указать После, если вы указали До.

Примечания

Если вы не укажете ни До, ни После, Microsoft Excel создаст новую книгу, содержащую скопированный объект Worksheet. Вновь созданная рабочая книга содержит свойство Application.ActiveWorkbook и содержит один рабочий лист. Один лист сохраняет свойства Name и CodeName исходного листа. Если скопированный рабочий лист содержит кодовый лист рабочего листа в проекте VBA, он также переносится в новую рабочую книгу.

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

Источник и место назначения должны находиться в одном и том же экземпляре Excel.Application, иначе возникнет ошибка времени выполнения "1004": такой интерфейс не поддерживается, если что-то вроде Sheet1.Copy objWb.Использовались Sheets(1) или ошибка времени выполнения "1004": метод копирования класса Worksheet не удался, если использовалось что-то вроде ThisWorkbook.Worksheets("Sheet1").Copy objWb.Sheets(1).

Пример

В этом примере копируется Лист1, размещая копию после Листа3.

В этом примере лист Sheet1 сначала копируется в новую пустую книгу, а затем сохраняется и закрывается новая книга.

В этом примере листы Sheet1, Sheet2 и Sheet4 копируются в новую пустую книгу, а затем сохраняются и закрываются.

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

Есть вопросы или отзывы об Office VBA или этой документации? См. раздел Поддержка и отзывы об Office VBA, чтобы узнать, как получить поддержку и оставить отзыв.

Если рабочая книга содержит макрос Visual Basic для приложений (VBA), который вы хотели бы использовать в другом месте, вы можете скопировать модуль, содержащий этот макрос, в другую открытую книгу с помощью редактора Visual Basic (VBE).

Макросы и инструменты VBA можно найти на вкладке "Разработчик", которая по умолчанию скрыта, поэтому первым шагом будет ее включение.

В Windows выберите «Файл» > «Параметры» > «Настроить ленту».

Для Mac выберите Excel > Настройки. > Лента и панель инструментов.

Затем в разделе "Настройка ленты" в разделе "Основные вкладки" установите флажок "Разработчик".

Обзор макросов и VBA

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

Макрос – это действие или набор действий, которые можно использовать для автоматизации задач.

Вы можете записывать макросы с помощью команды "Запись макроса" на вкладке "Разработчик".

Макросы записываются на языке программирования VBA.

Вы можете просматривать и редактировать свои макросы в редакторе Visual Basic, окне, которое открывается в Excel. Вот пример окна VBE для Windows:

Макросы с именами MakeCellGreen и SetRowHeight находятся в модуле с именем Module1, который хранится в Book1.

Копирование модуля из одной книги в другую

Откройте книгу, содержащую макрос, который вы хотите скопировать, и книгу, в которую вы хотите его скопировать.

На вкладке "Разработчик" нажмите Visual Basic, чтобы открыть редактор Visual Basic.

В редакторе Visual Basic в меню "Вид" выберите "Проводник проекта" или нажмите CTRL+R .

На панели Project Explorer перетащите модуль, содержащий макрос, который вы хотите скопировать, в целевую книгу. В данном случае мы копируем Module1 из Book2.xlsm в Book1.xlsm.

Module1 скопирован из Book2.xlsm

Копия Module1 скопирована в Book1.xlsm

Нужна дополнительная помощь?

Вы всегда можете обратиться к эксперту в техническом сообществе Excel или получить поддержку в сообществе ответов.

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

Есть ли простой способ сделать это?

3 ответа 3

Этот метод еще проще, если вы согласны с меньшим количеством опций:

Красиво и просто, однако, когда я использую это решение и копируемая база данных Access открыта, я получаю сообщение об ошибке "Отказано в доступе". Этого не происходит при использовании FileSystemObject.

Тогда вы можете использовать

где источник и место назначения — это полные имена (включая пути) файла.

По сравнению с другим, простым решением с FileCopy, это решение имеет то преимущество, что исходный файл также можно копировать, когда он открыт (например, с помощью MS Access), т. е. когда он доступен только для чтения.

Одна вещь, которая вызвала у меня сильную головную боль при использовании этого кода (может повлиять на других, и я бы хотел, чтобы кто-нибудь оставил комментарий, подобный этому, для меня):

  • Моя цель — создать панель управления с динамическим доступом, для которой требуется обновление связанных таблиц.
  • Я использую методы копирования, описанные выше, чтобы заменить существующие связанные файлы CSV их обновленной версией.
  • Выполнение приведенного выше кода вручную из модуля сработало нормально.
  • При запуске идентичного кода из формы, связанной с данными CSV, возникала ошибка времени выполнения 70 (отказано в доступе), хотя первым шагом моего кода было закрытие этой формы (что должно было разблокировать файл CSV, чтобы его можно было перезаписать). ).
  • Теперь я считаю, что, несмотря на то, что форма закрыта, устаревший файл CSV остается заблокированным, пока выполняется VBA, связанный с этой формой.

Моим решением будет запуск кода (событие по таймеру) из другой скрытой формы, которая открывается вместе с базой данных.

Не тот ответ, который вы ищете? Просмотрите другие вопросы с тегом vba copy или задайте свой вопрос.

Связано

Связанные

Горячие вопросы о сети

Чтобы подписаться на этот RSS-канал, скопируйте и вставьте этот URL-адрес в программу для чтения RSS.

дизайн сайта / логотип © 2022 Stack Exchange Inc; вклады пользователей под лицензией cc by-sa. версия 2022.3.21.41733

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