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

Как же тогда копировать листы в макрос? Ответ — использовать метод копирования с отдельным листом или группой листов.

Например, следующий код макроса скопирует текущий выбранный рабочий лист в новую книгу:

ActiveSheet.Copy

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

ActiveWorkbook.SaveAs Filename:="MyNewFile.xlsm", _   FileFormat:=xlOpenXMLWorkbookMacroEnabled ActiveWindow.Close

Если вы хотите скопировать определенный лист в другую книгу, вы делаете это, указав имя листа, который вы хотите скопировать, вместо использования объекта ActiveSheet:

Sheets("Sheet1").Copy

В этом примере лист с именем Sheet1 копируется из коллекции Sheets в новую книгу. Затем вы можете сохранить новую книгу, как уже обсуждалось.

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

Вот что сделано в этом макросе:

Sub CopyWorkbook()

Dim sCopyName As String

sCopyName = "My New Workbook.xlsm"



SelectedSheets.Copy     ActiveWorkbook.SaveAs Filename:=sCopyName, _       FileFormat:=xlOpenXMLWorkbookMacroEnabled End Sub

Обратите внимание на использование команды Копировать. Макрос будет работать независимо от того, выбран ли у вас один рабочий лист или пятьдесят; это не имеет значения. Если вы хотите скопировать все рабочие листы из одной книги в другую, все, что вам нужно сделать, это внести одно изменение в макрос в строке, где вызывается метод копирования:

Sheets.Copy

Это скопирует всю коллекцию Sheets, которая состоит из всех листов в книге.

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

ActiveSheet.Copy After:=Sheets("Sheet7")

Эта строка кода копирует активный рабочий лист в ту же книгу, чтобы он отображался после рабочего листа с именем Sheet7. Если это более соответствует вашим потребностям, вы можете вместо этого указать рабочий лист, перед которым должна быть размещена копия:

ActiveSheet.Copy Before:=Sheets("Sheet7")

Это приводит к тому, что рабочий лист помещается перед Sheet7, а не после него.

_Примечание: _

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

link: / excelribbon-ExcelTipsMacros [Щелкните здесь, чтобы открыть эту специальную страницу в новой вкладке браузера].

ExcelTips — ваш источник экономичного обучения Microsoft Excel.

Этот совет (11856) применим к Microsoft Excel 2007, 2010, 2013, 2016, 2019 и Excel в Office 365. Вы можете найти версию этого совета для старого интерфейса меню Excel здесь:

link: / excel-Copying_Worksheets_in_a_Macro [Копирование рабочих листов в макросе].