Макрос для копирования данных из одного файла в другой

Обновлено: 21.11.2024

Я пытаюсь скопировать некоторые данные из файла с именем "Excel Macro.xlsm" в файл с именем "BCH.xlsx", но, похоже, cnt не справляется с этим.

Исходный файл "Excel Macro.xlsm" содержит 2 листа: основной и BCH. Я разместил кнопку на «главном» листе, которая должна извлекать ячейки A1: E20 из листа BCH (в Excel Macro.xlsm) и помещать их в закрытый файл Excel с именем «BCH.xlsx», который содержит только один лист «BCH ".

Я использую следующий код:

Sub Demo()
Dim wbSource As Workbook
Dim wbTarget As Workbook

Set wbSource = Workbooks.Open("c:\Users\Chris\desktop\Excel Macro.xlsm")
Set wbTarget = Workbooks.Open("c:\Users\Chris\desktop\BCH.xlsx ") ' Workbooks.Open(" ")

wbTarget.Sheets("BCH").Range("A1:E20").Value = wbSource.Sheets("BCH").Range("A1:E20")
wbSource.Close
Конец подписки


Может ли кто-нибудь указать мне правильное направление - я получаю сообщение об ошибке «Синтаксическая ошибка. Ошибка компиляции» при запуске.
Это первый раз, когда я пытался сделать VBA, так что полегче)


Заранее большое спасибо

Факты об Excel

Предотвратить получение данных GETPIVOTD. Выберите внутри сводной таблицы. На вкладке "Анализ" на ленте откройте раскрывающееся меню рядом с параметром "Параметры" и отключите его.

алансидман

Известный участник

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

изменить названия листов

Акуини

Известный участник

геоджоветт

Новый участник

Переименовали листы и изменили кавычки, и теперь файл BCH открывается, но не заполняется данными из макроса Excel.

Это текущий код:

Частная подпрограмма CommandButton2_Click()


Затемнить wbSource как книгу
Затемнить wbTarget как книгу


Set wbSource = Workbooks.Open("c:\Users\c.jowett.STAARDOMAIN\desktop\Excel Macro.xlsm")
Set wbTarget = Workbooks.Open("c:\Users \c.jowett.STARDOMAIN\desktop\BCH.xlsx") ' Workbooks.Open(" ") '


'Теперь перенесите значения из wbSource в wbTarget:
wbTarget.Sheets("BCH1").Range("A1:E100").Value = wbSource.Sheets("BCH"). Диапазон("A1:A100")

Есть еще предложения?

Акуини

Известный участник

геоджоветт

Новый участник

Хорошее замечание! хорошо подмечено. Я изменил их оба на A1:E100, но это по-прежнему просто открывает документ BCH и оставляет его пустым без копирования данных.


В следующей строке:

wbTarget.Sheets("BCH1").Range("A1:E100").Value = wbSource.Sheets("BCH").Range("A1:A100")

Лист BCH1 (в формате BCH.xlsx) является целевым листом, а лист BCH (в формате Excel Macro.xlsm) является исходным. Правильно ли он закодирован для этого? или они оба должны быть BCH1?

Акуини

Известный участник

геоджоветт

Новый участник

Это сработало! фантастически большое спасибо Акуини. Это сделало мой день!

Пожалуйста, могу я порассуждать о моем следующем задании (или для этого нужна новая тема?)

Теперь данные из листа «BCH» в «Excel Macro.xslm» копируются на новый лист с именем «BCH». Как мне сделать другой лист в «Excel Macro.xslm» с именем «TEST» для копирования данные с этого листа в новый файл с именем "TEST.xlsx"?

Идея состоит в том, что один лист может содержать основные данные, но одним нажатием кнопки он может перенести данные с каждого из листов в новые файлы. лист BCH копируется в новый файл с именем BCH, лист TEST копируется в новый файл с именем TEST.xslx, а лист TEST2 копируется в новый файл с именем TEST2.xslx

Я понимаю, что могу сделать это с помощью нескольких кнопок, используя тот же код, что и выше, но я бы хотел, чтобы эта кнопка открывала и копировала данные на несколько листов. Легко ли это сделать?

Итог: узнайте, как использовать макросы VBA для копирования и вставки данных из одной книги Excel в другую, включая добавление данных в конец существующего диапазона или замену данных.

Уровень квалификации: средний

Загрузить файлы Excel

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

New-Data.xlsx (12,2 КБ)

А вот книга, в которую я копирую данные в. Это тот, в котором есть весь код макроса:

Reports.xlsm (22,0 КБ)

Копирование данных из одной книги в другую с помощью макросов Excel

Существует несколько способов копирования и вставки данных с помощью VBA. Сначала мы собираемся использовать метод Range.Copy. Это позволяет нам выполнить все действие в одной строке кода.

Метод Range.Copy имеет необязательный параметр Destination, который позволяет нам указать диапазон, в который мы хотим вставить данные.

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

Метод Range.Copy выполняет обычное копирование и вставку, включая форматирование и формулы. Если вы просто хотите вставить значения, ниже приведен пример.

Важные моменты, которые следует помнить

При использовании этого макроса для копирования данных из одной книги в другую помните об этом.

  • Вы должны указать правильное расширение файла в свойстве Workbooks (подробности см. в видео выше).
  • Для этого в рабочих книгах не обязательно должны быть включены макросы.
  • При желании этот код можно сохранить в отдельной книге, например в личной книге макросов. (Узнайте, как создать личную книгу макросов, здесь.)
  • Вам не нужно сначала выбирать или активировать книги, листы или даже диапазоны. Это связано с тем, что в коде уже указаны эти данные.
  • При использовании этого кода должны быть открыты обе книги. Но процесс открытия и закрытия книг можно автоматизировать с помощью дополнительного кода:

Специальный метод PasteSpecial для вставки значений, форматов и т. д.

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

Ниже приведен пример макроса. Вы заметите, что в моем примере используется тип PasteValues, но вы также можете использовать PasteFormulas, PasteFormats или любые другие доступные параметры PasteSpecial. Вот список PasteTypes.

Чтобы узнать больше о параметрах PasteSpecial, посмотрите мою серию видео о копировании и вставке с помощью VBA.

Вставка ниже последней ячейки

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

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

Этот код вставляет ваши исходные данные сразу после существующих данных конечного листа.

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

Очистка диапазона назначения перед вставкой

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

Запуск этого макроса удалит все существующие данные в целевом диапазоне перед вставкой данных из исходного листа.

Альтернативный код для копирования данных в текущую книгу

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

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

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

Копировать и вставлять между листами в одной книге

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

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

Заключение

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

Пожалуйста, оставьте комментарий ниже с любыми вопросами или предложениями. Спасибо! 🙂

При работе с данными в Microsoft Excel команда «Переместить или скопировать лист» — это быстрый и простой способ переместить или скопировать целые листы в другие места в том же файле или в другой книге. Кроме того, вы можете использовать VBA (Visual Basic для приложений), чтобы автоматизировать задачу и сделать ее менее утомительной.

Эта статья познакомит вас с обоими методами копирования данных в другую книгу в Microsoft Excel.

Перемещение или копирование данных в одной книге

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

На вкладке "Главная" верхней панели инструментов найдите группу "Ячейки" и нажмите "Формат". В разделе «Упорядочить листы» нажмите «Переместить или скопировать лист».

Откроется диалоговое окно. В списке «До» вы можете либо щелкнуть лист, перед которым вы хотите вставить перемещенные или скопированные листы, либо щелкнуть «Переместить в конец», чтобы вставить листы после последнего листа в вашей книге.

Чтобы копировать листы, а не перемещать их, установите флажок "Создать копию" в диалоговом окне "Переместить или скопировать".

Перемещение или копирование данных в разных книгах

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

Выберите листы, которые вы хотите переместить или скопировать. Затем перейдите на вкладку «Главная» на панели инструментов и щелкните группу «Ячейки» > «Формат». В разделе «Упорядочить листы» нажмите «Переместить или скопировать лист».

Откроется диалоговое окно. В списке В книгу выберите либо переместить или скопировать выбранные листы в существующую книгу, либо переместить или скопировать листы в новую книгу.

В списке «До» вы можете либо щелкнуть лист, перед которым вы хотите вставить перемещенные или скопированные листы, либо щелкнуть «Переместить в конец», чтобы вставить листы после последнего листа в вашей книге.

Перемещение или копирование данных с помощью VBA

Мы начали с того, что показали вам самый простой пример копирования листов: копирование листов в новую книгу. В приведенных ниже примерах показано, как скопировать лист в той же книге. При копировании листа в рабочей книге необходимо указать местоположение. Чтобы указать местоположение, вы сообщите VBA, чтобы переместить рабочий лист ДО или ПОСЛЕ другого рабочего листа.

Копировать лист перед другим листом

Здесь мы укажем копирование и вставку Листа перед Листом2

Копировать лист перед первым листом

Вместо указания имени листа вы также можете указать положение листа. Здесь мы копируем и вставляем лист перед первым листом в книге.

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

Программирование VBA стало проще

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

Копировать лист после последнего листа

Используйте свойство After, чтобы указать VBA вставить лист ПОСЛЕ другого листа. Здесь мы скопируем и вставим лист после последнего листа в книге:

Обратите внимание, что мы использовали Sheets.Count для подсчета количества листов в книге.

Переместить лист

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

Копия и имя листа

После копирования и вставки листа вновь созданный лист становится ActiveSheet. Итак, чтобы переименовать наш новый лист, просто используйте ActiveSheet.Name:

Мы покажем, как скопировать существующий файл Пример файла 1.xlsx в папку Папка VBA. В этом примере мы не будем переименовывать файл, просто скопируем и перезапишем его. В настоящее время в папке есть только один файл:

Изображение 1. Файл в папке C:\VBA Folder

Вот код:

Сначала необходимо создать объект класса Scripting.Объект файловой системы:

Затем мы можем использовать метод CopyFile:

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

Давайте теперь посмотрим, что произойдет, если у нас будут те же места назначения, но для параметра Overwrite установлено значение False. Вам просто нужно изменить эту строку кода:

В результате вы получите сообщение об ошибке, как показано на изображении 2:

Изображение 2. Ошибка при копировании файла

Скопировать и переименовать файл

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

Как видно из последней строки кода, мы хотим скопировать файл Sample file 1.xlsx в ту же папку и назвать его Sample file Copy.xlsx:

Теперь у нас есть два файла в папке VBA. Результат кода показан на изображении 3:

Изображение 3. Скопируйте и переименуйте файл

Программирование VBA стало проще

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

Генератор кода VBA

Надстройка примеров кода VBA

Легкий доступ ко всем примерам кода на нашем сайте.

Просто перейдите в меню, нажмите, и код будет вставлен прямо в ваш модуль. Надстройка .xlam.

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