Копировать лист Excel vba из одной книги в другую
Обновлено: 21.11.2024
В этом руководстве представлен набор макросов для дублирования листов в Excel: копирование и переименование на основе значения ячейки, копирование нескольких листов, копирование активного рабочего листа в другой файл без его открытия и многое другое.< /p>
Вручную копировать листы в Excel довольно быстро и просто. если выполняется только один или два раза. Дублирование нескольких листов несколько раз утомительно и отнимает много времени. На этой странице вы найдете несколько полезных макросов для автоматизации этой задачи.
Excel VBA для копирования листа в новую книгу
Этот простейший однострочный макрос делает именно то, что следует из его названия — копирует активный лист в новую книгу.
Копировать несколько листов в Excel с помощью VBA
Если вы хотите скопировать несколько листов из активной книги в новую, выберите все интересующие листы и запустите этот макрос:
Excel VBA для копирования листа в другую книгу
В зависимости от того, куда вы хотите вставить скопированный лист, используйте один из следующих макросов.
Копировать лист в начало другой книги
Этот макрос копирует активный лист перед всеми остальными листами в целевом файле, в данном примере Book1. Чтобы скопировать в другой файл, замените «Book1.xlsx» полным именем целевой книги.
Копировать лист в конец другой книги
Этот фрагмент кода дублирует активный рабочий лист и помещает копию в конец Book1. Опять же, не забудьте заменить "Book1.xlsx" на имя целевой книги.
Копировать лист в выбранную книгу
Чтобы иметь возможность копировать текущий лист в любую открытую книгу, вы можете создать пользовательскую форму (с именем UserForm1) с элементом управления ListBox (с именем ListBox1< /em>) и две кнопки:
Затем дважды щелкните форму и вставьте приведенный ниже код в окно кода:
Установив пользовательскую форму, вы можете использовать один из следующих макросов, чтобы скопировать активный лист в выбранную вами книгу.
Копировать лист в начало выбранной книги:
Копировать лист в конец выбранной книги:
При запуске в Excel макрос покажет вам список всех открытых книг. Вы выбираете нужный и нажимаете ОК:
Макрос Excel для копирования листа и переименования
При копировании листа в Excel реплике присваивается имя в формате по умолчанию, например Лист1 (2). Следующие макросы избавят вас от необходимости вручную изменять имя по умолчанию.
Этот код дублирует активный лист, называет копию "Тестовый лист" (вы можете заменить его любым другим именем) и помещает скопированный лист в конец текущей книги.
Чтобы разрешить пользователю указать имя для скопированного листа, используйте этот код:
После запуска макрос отображает следующее поле ввода, в котором вы вводите желаемое имя и нажимаете OK:
Макрос Excel для копирования листа и переименования на основе значения ячейки
В некоторых случаях может быть удобнее назвать копию с определенным значением ячейки, например заголовком столбца. Для этого вы просто берете приведенный выше код и автоматически вводите значение текущей выбранной ячейки в поле ввода. Как и в предыдущем примере, копия будет помещена в конец активной книги.
Сложнее всего было бы сделать так, чтобы ваши пользователи всегда выбирали правильную ячейку перед запуском макроса :)
Кроме того, вы можете жестко указать адрес ячейки, по которой должна быть названа копия, ячейка A1 в приведенном ниже коде. Чтобы назвать скопированный лист на основе другой ячейки, замените A1 соответствующей ссылкой на ячейку.
Макрос для копирования листа в закрытую книгу
Этот макрос копирует активный лист в конец закрытой книги. Имя другой книги в коде не указано - макрос откроет стандартное окно проводника Windows и позволит выбрать любой файл назначения:
После того, как вы выберете файл и нажмете Открыть, макрос скопирует активный лист и автоматически закроет целевую книгу.
Excel VBA для копирования листа из другой книги без открытия
Этот макрос позволяет скопировать лист из другого файла Excel, не открывая его. Скопированный лист будет вставлен в конец текущей книги.
Только не забудьте сделать пару замен в коде:
- C:\Users\XXX\Documents\Target_Book.xlsx следует заменить на фактический путь и имя книги, из которой вы хотите скопировать лист.
- Лист1 следует заменить именем листа, который вы хотите скопировать.
Excel VBA для многократного дублирования листа
Иногда может потребоваться дублировать один и тот же лист более одного раза, например, чтобы протестировать разные формулы на одном и том же наборе данных. Это легко сделать с помощью следующего макроса.
Откройте исходный лист, запустите макрос, укажите, сколько копий активного листа вы хотите сделать, и нажмите ОК:
Как дублировать листы в Excel с помощью VBA
Чтобы скопировать лист в Excel с помощью одного из приведенных выше макросов, вы можете либо вставить код VBA в свою книгу, либо запустить макрос из нашего образца книги.
Как добавить макрос в книгу
Чтобы вставить код в книгу, выполните следующие действия:
- Откройте лист, который хотите скопировать.
- Нажмите клавиши ALT + F11, чтобы открыть редактор Visual Basic.
- На левой панели щелкните правой кнопкой мыши Эта книга и выберите Вставить >Модуль.
- Вставьте код в окно кода.
- Нажмите F5, чтобы запустить макрос.
Подробные пошаговые инструкции см. в разделе Как вставить код VBA в Excel.
Как запустить макрос из нашего примера книги
Кроме того, вы можете загрузить наш образец книги в Duplicate Excel Sheets и запустить код оттуда.
Образец книги содержит следующие макросы:
CopySheetToNewWorkbook — копирует текущий лист в новую книгу.
CopySelectedSheets: копирование нескольких выбранных листов в новую книгу.
CopySheetToBeginningAnotherWorkbook — копирует активный лист в начало другой книги.
CopySheetToEndAnotherWorkbook – копирует активный лист в конец другого файла Excel.
CopySheetAndRename: дублирует текущий лист, переименовывает его, как указано пользователем, и помещает копию после всех остальных листов в текущей книге.
CopySheetAndRenamePredefined: дублирует активный лист, присваивает копии жестко заданное имя и помещает ее в конец текущей книги.
CopySheetAndRenameByCell: создает копию активного листа и переименовывает его на основе выбранного значения ячейки.
CopySheetAndRenameByCell2: копирует активный лист и переименовывает его на основе жестко заданного адреса ячейки.
CopySheetToClosedWorkbook — позволяет копировать лист в закрытую книгу.
CopySheetFromClosedWorkbook: позволяет скопировать лист из другого файла Excel, не открывая его.
DuplicateSheetMultipleTimes: позволяет многократно дублировать лист в Excel.
Чтобы запустить макрос в Excel, выполните следующие действия:
- Откройте загруженную книгу и включите содержимое, если будет предложено.
- Откройте свою книгу и перейдите к листу, который хотите скопировать.
- На листе нажмите Alt + F8 , выберите нужный макрос и нажмите "Выполнить".
Вот как вы можете дублировать лист в Excel с помощью VBA. Я благодарю вас за чтение и надеюсь увидеть вас в нашем блоге на следующей неделе!
Вас также может заинтересовать
26 комментариев к "Как дублировать лист в Excel с помощью VBA"
Я настроил макрос COPY A WORKSHEET AND RENAME, но он копирует новый рабочий лист ПОСЛЕ (справа) от источника. Я хочу, чтобы он копировался раньше. Я попытался изменить команду «После» на «До», но это не сработало. предложения?
Quiero copiar la hoja T3 y reemplazar con ella las hojas T1 y T2 в том же порядке, что и несравненные ошибки Ref! en la hoja Индекс
Привет
Есть ли способ запустить макрос, чтобы скопировать всю цепочку комментариев/заметок из ячеек на новый лист?
Я пытался найти код VB, но он не работал, я использую Office 365.
Спасибо
Здравствуйте.
Я пытаюсь разместить кнопку формы на листах в книге, поэтому, когда данные заполняются за неделю. Мне нравится копировать этот лист, говоря, что имя рабочей книги «работает» и имя листа «еженедельный отчет», когда эта страница подана за неделю. Я хочу скопировать этот лист в закрытую рабочую книгу, скажем, имя «Архив еженедельных отчетов», поместить его в конец всех листов и назвать лист, который я копирую, в «еженедельный отчет неделя 21» после 20-го листа еженедельного отчета. Все рабочие книги и листы доступны для обновлений, и мы хотим, чтобы другим было проще их обновлять. Не могли бы вы помочь. Я новичок в кодировании VBA.
Я получил сообщение "путь не найден '\.vbbad70.tmp' при использовании:
Sheets(SheetCount).Copy After:=Sheets(SheetCount)
Здравствуйте, большое спасибо за эти коды, они действительно экономят много времени. У меня есть вопрос относительно копирования листа в закрытую книгу. Когда я пытался это сделать, у меня возникает ошибка времени выполнения'91. ' "currentSheet.Copy After:=closedBook.Sheets(closedBook.Worksheets.Count)". Я копирую на жесткий диск. Будем рады, если сможете помочь. С уважением, Ян.
Привет,
Это очень полезно.
Можете ли вы помочь мне с кодами для копирования нескольких листов (только значения и формат) из книги в новую книгу.
Спасибо!
Огромное спасибо! Сделал именно то, что мне было нужно (с некоторыми легкими изменениями)
Здравствуйте,
re Power Pivot/Управление в модели данных
Я получаю сообщение "PowerPivot не может загрузить модель данных".
Я пробовал много способов решить эту проблему, но не повезло.
Как вы думаете, будет ли работать, если я экспортирую все модули и листы по отдельности, а затем импортирую их в новую чистую книгу (.xlsm)
Уважаемый господин,
У меня есть рабочая тетрадь, в которой есть лист с некоторыми формулами. Я хочу создать дубликат этого листа и переименовать его со значением ячейки. И мне нужен этот дубликат листа только со значениями ячеек (как специальная вставка). Я сделал это с помощью ваших формул, но это копирование и вставка на исходный лист, а не на дубликат листа. Пожалуйста помогите.
Private Sub CommandButton1_Click()
Затемнить wks как рабочий лист
Установить wks = ActiveSheet
ActiveSheet.Copy After:=Worksheets(Sheets.Count)
If wks.Range( "b9").Value "" Then
При ошибке возобновить следующий
ActiveSheet.Name = wks.Range("b9").Value
End If
CommandButton2_Click
'wks.Activate
End Sub
Private Sub CommandButton2_Click()
Worksheets(Sheets.Count).Activate
Range("a1:s36").Copy
Range ("a1:s36").PasteSpecial xlPasteValues
End Sub
Всем доброе утро,
Приведенные выше макросы чрезвычайно полезны, но есть ли способ скопировать лист как «только значения», аналогичный методу PasteSpecial?
Может ли кто-нибудь помочь мне, как копировать листы с фигурами?
Мой код ссылается на определенную форму, поэтому, когда я копирую лист, имена фигур меняются.
Как я могу предотвратить это?
Есть ли способ написать код, который не должен ссылаться на каждую фигуру?
Спасибо за помощь.
Я пытаюсь несколько раз скопировать лист Excel, переименовать его на основе списка Excel, а затем заполнить столбец рядом с именем листа ссылкой на лист.
Список находится на листе «Обложка», и я хочу скопировать лист «Шаблон» на основе выбора списка. Ярлык ссылки будет находиться на титульном листе в столбце рядом с ячейкой, которая использовалась для создания имени листа. Там будет много вкладок и это сильно облегчит жизнь, если будет ссылка с титульной страницы
Возможно ли это, и если да, то как мне это сделать?
Привет
Можно ли перезаписать лист с таким же именем на листе, где этот лист должен быть скопирован? Мне нужно время от времени копировать один и тот же лист. Пожалуйста, помогите?
Здравствуйте!
Ваши макросы оказались очень полезными.
Я очень ценю вашу работу. Спасибо.
Большое спасибо.
Макрос Excel для копирования листа и переименования
Может ли кнопка быть на одном листе, но вместо копирования активного листа она копирует лист под названием «Новый наем»?
Excel VBA для многократного дублирования листа:
Это самое близкое к тому, что я пытаюсь сделать. Но все новые листы называются так же, как и исходные, но с (x). т. е. исходный лист 10001, и мне нужно, чтобы они были пронумерованы 10002, 10003 и т. д. Но они нумеруются 10001, 10001 (1), 10001 (2).
Как сделать так, чтобы вкладки листа нумеровались так, как я хочу? Любая помощь будет принята с благодарностью.
Спасибо!
Спасибо за этот vba "Excel VBA для копирования листа из другой книги без открытия", который отлично работает в его нынешнем виде. Не могли бы вы немного подправить его, чтобы вместо указания конкретного пути открывалось окно и я выбирал файл, из которого нужно вытащить данные. Остальное должно остаться прежним. Заранее спасибо.
Здравствуйте, я использовал ваш код под названием "Excel VBA для многократного дублирования листа"
но как мне переименовать листы? Я хочу, чтобы они были в цифрах.
Например,
Исходный лист является «мастером»
Копировать нужно 5
результат должен быть в названии листа как
Точка 1
Точка 2
Точка 3
Пункт 4
Пункт 5
---[Snip, Snip]---
Public Sub DuplicateSheetMultipleTimes()
Dim n As Integer
При ошибке Возобновить следующий
n = InputBox("Сколько копии активного листа вы хотите сделать?")
If n >= 1 Then
For numtimes = 1 To n
activeSheet.Copy After:=ActiveWorkbook.Sheets(Worksheets.Count)
ActiveSheet.name = "Point" + CStr (numtimes)
Следующая
Конец, если
Конец подписки
---[Snip, Sni
Это приведет к тому, что различные скопированные листы будут переименованы по мере их копирования
Здравствуйте,
У меня есть книга с большим количеством листов. Мне нужны определенные ячейки, скопированные с листа 1, листа 2 книги Workbook1, и показать их в другой книге. Например, у меня есть идентификатор и имя дилера на листе 1 и рейтинг на листе 5 той же книги 1. Мне нужно получить рейтинг, используя идентификатор, уникальный для другого листа, а затем мне нужно, чтобы поле идентификатора было динамическим. Как мне это сделать? пожалуйста, посоветуйте.
Можно ли выбрать диапазон вкладок? Например, макрос требует, чтобы я указывал названия вкладок по отдельности, т.е. Листы(Массив ("Вкладка1", "Вкладка2", "Вкладка3", "и т. д.")).Копировать)
Что делать, если я хочу выбрать открыть все вкладки между «Tab1» и «Tab8», не перечисляя их все по отдельности? Возможно ли это?
Здравствуйте, ваши макросы очень помогли.
Мне было интересно, можно ли добиться следующего:
1) я выбираю диапазон, скажем, A2-A15, который содержит имена рабочих листов в конкретной книге.
2) Я хочу создать новую рабочую книгу с именами выбранных рабочих листов из активной рабочей книги, используя следующую формулу:
“
Sub Copy_Worksheets()
Worksheets(Array("ACC_HF ", "ACC_Aflac", "и т. д.")). Копировать
End Sub
"
Есть ли способ преобразовать выбранный диапазон и передать его в аргумент массива?
Как я могу скопировать данные из диапазона ячеек, скажем, B5: I39 из нескольких рабочих листов, и вставить их в один новый рабочий лист, я хочу, чтобы все выбранные рабочие листы с определенным диапазоном данных были скопированы на один рабочий лист в конец рабочей тетради. Все форматирование с выбранных листов также будет скопировано.
Спасибо за совет, есть ли способ скопировать строку в одной книге и вставить эту строку данных в другую книгу в определенной ячейке? Однако есть одна загвоздка: данные нужно будет синхронизировать с другой вкладкой той же книги раз в два месяца.
Отлично,
как я могу скопировать листы, содержащие определенную текстовую строку где-то на листе, в новую книгу?
Копирует лист в другое место в текущей книге или в новую книгу.
Синтаксис
выражение. Копировать (До, После)
выражение Переменная, представляющая объект Worksheet.
Параметры
Имя | Обязательный/Необязательный | Тип данных | Описание |
---|---|---|---|
До | Необязательно | Вариант | Лист, перед которым будет размещен скопированный лист. Вы не можете указать До, если вы укажете После. |
После | Необязательно | Вариант | Лист, после которого будет размещен скопированный лист. Вы не можете указать После, если вы указали До. |
Примечания
Если вы не укажете ни До, ни После, 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, чтобы узнать, как получить поддержку и оставить отзыв.
Вы можете копировать и перемещать лист в Excel с помощью кода VBA, и в этом руководстве мы узнаем, как это сделать.
Копировать лист в той же книге
Если вы хотите скопировать лист в той же книге, вы можете использовать следующий код, где вы использовали метод копирования.
В этом коде лист1 является первым листом в книге, и когда вы запускаете этот код, он копирует лист с именем "Лист5" перед первым листом в книге.
И если вы хотите скопировать его после первого листа, код будет выглядеть следующим образом.
И если вы хотите скопировать его после первого листа, то код будет примерно следующим.
Когда вы запускаете этот код VBA, он копирует «Лист5» до и после «Листа3».
С помощью следующей строки кода вы можете скопировать лист после последнего листа в книге. Он использует sheet.count, чтобы получить количество листов, а затем использует число, чтобы скопировать лист до последнего.
Скопировать лист в той же книге с новым именем
И если вы хотите скопировать лист, а затем мгновенно переименовать его, вам нужно использовать свойство name, как в следующем коде.
Перемещение листа в той же книге
Чтобы переместить лист в той же книге, вам нужно использовать метод перемещения, как в следующем коде.
Этот код переместит «Лист5» перед «Лист2», как вы можете видеть на снимке выше.
Скопировать лист в новую книгу
При использовании метода копирования без определения листа в текущей книге VBA открывает новую книгу и копирует этот лист в эту книгу.
И переместить лист в новую книгу.
Копировать несколько листов в новую книгу
Если вы хотите добавить несколько листов в новую книгу за один раз, используйте следующий код.
Приведенный выше код создает массив листов, а затем копирует их все в новую книгу.
Копировать лист в другую книгу
Если вы хотите скопировать лист в другую книгу, которая уже открыта, вы можете указать имя книги после или перед аргументом.
Приведенный выше код копирует Sheet1 из активной книги и добавляет к первому листу Book1.xlsx, который уже открыт.
И если вы хотите его переместить.
Копировать лист в закрытую книгу
Есть способ скопировать лист в закрытую книгу, и вам не нужно ее открывать. Посмотрите на приведенный ниже код.
В этом коде у вас есть переменная myBook, а затем ей назначена рабочая книга. Мы отключили обновление экрана, чтобы код мог выполнять задачу на сервере.
Копировать лист из другой книги, не открывая его
Таким же образом вы можете копировать и перемещать лист из закрытой книги. Посмотрите на приведенный ниже код.
Вывод: узнайте, как использовать макросы 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 делает предположения, из-за которых у вас могут возникнуть проблемы.
Заключение
Я надеюсь, что эти советы и макросы помогут вам сэкономить время при копировании данных между книгами. Автоматизация этой утомительной задачи поможет предотвратить ошибки и упростить обновление отчетов другими пользователями.
Пожалуйста, оставьте комментарий ниже с любыми вопросами или предложениями. Спасибо! 🙂
Читайте также: