Копирование листов в макрос (Microsoft Excel)
При организации данных в книгах нередко копируют рабочие листы из одной книги в другую. Действительно, команду «Переместить» или «Копировать лист» (видимой, когда вы щелкаете правой кнопкой мыши на вкладке рабочего листа) я использую довольно часто, и я готов поспорить, что другие используют ее так же часто.
Как же тогда копировать листы в макрос? Ответ — использовать метод копирования с отдельным листом или группой листов.
Например, следующий код макроса скопирует текущий выбранный рабочий лист в новую книгу:
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 [Копирование рабочих листов в макросе]
.