В этом руководстве будет рассказано, как скопировать лист или рабочий лист с помощью VBA.
Копировать лист в новую книгу
Чтобы скопировать лист в новую книгу:
1 | Листы ("Лист1"). Копировать |
Копировать ActiveSheet в новую книгу
Чтобы скопировать ActiveSheet в новую книгу:
1 | ActiveSheet.Copy |
Копировать несколько листов в новую книгу
Чтобы скопировать несколько листов в новую книгу:
1 | ActiveWindow.SelectedSheets.Copy |
Копировать лист в той же книге
Мы начали с того, что показали вам самый простой пример копирования листов: копирование листов в новую рабочую книгу. Эти примеры ниже покажут вам, как скопировать лист в той же книге. При копировании листа в Worbook вы должны указать местоположение. Чтобы указать местоположение, вы скажете VBA переместить рабочий лист ДО или ПОСЛЕ другого рабочего листа.
Копировать лист перед другим листом
Здесь мы укажем копировать и вставлять Sheet перед Sheet2
1 | Листы ("Лист1"). Копировать до: = Листы ("Лист2") |
Копировать лист перед первым листом
Вместо указания имени листа вы также можете указать положение листа. Здесь мы копируем и вставляем лист перед первым листом в книге.
1 | Листы ("Лист1"). Копировать до: = Листы (1) |
Вновь созданный лист теперь будет первым листом в книге.
Копировать лист после последнего листа
Используйте свойство After, чтобы указать VBA вставить лист ПОСЛЕ другого листа. Здесь мы скопируем и вставим лист после последнего листа в книге:
1 | Листы ("Sheet1"). Копировать после: = Sheets (Sheets.Count) |
Обратите внимание, что мы использовали Sheets.Count для подсчета количества листов в книге.
Переместить лист
Вы также можете перемещать лист в рабочей книге, используя аналогичный синтаксис. Этот код переместит Sheet1 в конец рабочей книги:
1 | Листы ("Sheet1"). Переместить после: = Sheets (Sheets.Count) |
Копия и имя листа
После копирования и вставки листа вновь созданный лист становится ActiveSheet. Итак, чтобы переименовать наш новый лист, просто используйте ActiveSheet.Name:
123456 | Sub CopySheetRename1 ()Листы ("Sheet1"). Копировать после: = Sheets (Sheets.Count)ActiveSheet.Name = "LastSheet"Конец подписки |
Если имя листа уже существует, приведенный выше код вызовет ошибку. Вместо этого мы можем использовать «On Error Resume Next», чтобы указать VBA игнорировать именование листа и продолжить остальную часть процедуры:
12345678 | Sub CopySheetRename2 ()Листы ("Sheet1"). Копировать после: = Sheets (Sheets.Count)При ошибке Возобновить ДалееActiveSheet.Name = "LastSheet"При ошибке GoTo 0Конец подписки |
Или используйте нашу функцию RangeExists, чтобы проверить, существует ли уже имя листа, прежде чем пытаться скопировать лист:
123456789101112131415161718 | Sub CopySheetRename3 ()Если RangeExists ("LastSheet"), тоMsgBox «Лист уже существует».ЕщеЛисты ("Sheet1"). Копировать после: = Sheets (Sheets.Count)ActiveSheet.Name = "LastSheet"Конец, еслиКонец подпискиФункция RangeExists (WhatSheet как строка, необязательно ByVal WhatRange As String = "A1") как логическоеТусклый тест как диапазонПри ошибке Возобновить ДалееУстановите test = ActiveWorkbook.Sheets (WhatSheet) .Range (WhatRange)RangeExists = Номер ошибки = 0При ошибке GoTo 0Конечная функция |
Копирование и имя листа на основе значения ячейки
Вы также можете скопировать и назвать лист на основе значения ячейки. Этот код будет называть рабочий лист на основе значения ячейки в A1.
12345678 | Sub CopySheetRenameFromCell ()Листы ("Sheet1"). Копировать после: = Sheets (Sheets.Count)При ошибке Возобновить ДалееActiveSheet.Name = Диапазон ("A1"). ЗначениеПри ошибке GoTo 0Конец подписки |
Копировать лист в другую книгу
До сих пор мы работали с копированием таблиц в рабочую тетрадь. Теперь мы рассмотрим примеры копирования и вставки листов в другие рабочие книги. Этот код скопирует лист в начало другой книги:
1 | Таблицы ("Sheet1"). Копировать перед: = Workbooks ("Example.xlsm"). Sheets (1) |
Это скопирует рабочий лист в конец другой книги.
1 | Таблицы ("Sheet1"). Копировать после: = Workbooks ("Example.xlsm"). Sheets (Workbooks ("Example.xlsm"). Sheets.Count) |
Обратите внимание, мы заменили 1 с участием Рабочие книги («Example.xlsm»). Sheets.Count чтобы получить последний рабочий лист.
Копировать лист в закрытую книгу
Вы также можете скопировать рабочий лист в закрытую рабочую книгу. Этот код откроет закрытую рабочую книгу, чтобы вы могли скопировать в нее лист.
123456789 | Sub CopySheetToClosedWB ()Application.ScreenUpdating = FalseУстановите closedBook = Workbooks.Open ("D: \ Dropbox \ excel \ article \ example.xlsm")Таблицы ("Sheet1"). Копировать до: = closedBook.Sheets (1)closedBook.Close SaveChanges: = TrueApplication.ScreenUpdating = TrueКонец подписки |
Копировать лист из другой книги, не открывая ее
И наоборот, этот код скопирует рабочий лист ИЗ закрытой книги без необходимости вручную открывать книгу.
123456789 | Sub CopySheetFromClosedWB ()Application.ScreenUpdating = FalseУстановите closedBook = Workbooks.Open ("D: \ Dropbox \ excel \ article \ example.xlsm")closedBook.Sheets ("Sheet1"). Копировать перед: = ThisWorkbook.Sheets (1)closedBook.Close SaveChanges: = FalseApplication.ScreenUpdating = TrueКонец подписки |
Обратите внимание, что в обоих этих примерах мы отключили ScreenUpdating, чтобы процесс работал в фоновом режиме.
Дублируйте лист Excel несколько раз
Вы также можете дублировать лист Excel несколько раз, используя цикл.
1234567891011121314 | Sub CopySheetMultipleTimes ()Dim n как целое числоDim i как целое числоПри ошибке Возобновить Далееn = InputBox («Сколько копий вы хотите сделать?»)Если n> 0, тоДля i = 1 К nActiveSheet.Copy После: = ActiveWorkbook.Sheets (Worksheets.Count)СледующийКонец, еслиКонец подписки |