Автоматическое копирование кода листа (Microsoft Excel)
Тим правильно отмечает, что пользователь может щелкнуть правой кнопкой мыши вкладку рабочего листа, а затем выбрать «Просмотреть код», чтобы открыть лист кода VBA для рабочего листа. Он написал код, который автоматически управляет ячейками, столбцами и строками. Этот код должен быть доступен на каждом листе в книге, даже если пользователь добавляет новые листы. Тим задается вопросом, есть ли способ, используя VBA, чтобы код одного рабочего листа автоматически копировался на новый рабочий лист в книге.
Есть несколько способов решить эту проблему. Один из способов — и, возможно, самый простой — это удалить макросы из кодовой таблицы рабочего листа и переместить их в модуль ThisWorkbook. Лист кода рабочего листа — это то, что вы видите, когда щелкаете правой кнопкой мыши вкладку рабочего листа. Код на этом листе предназначен для обработки событий, которые происходят на листе и только на этом листе. Если вы переместите код в модуль ThisWorkbook, события все равно можно будет обрабатывать, но эти события применяются ко всем листам в книге.
Например, когда вы щелкаете правой кнопкой мыши вкладку рабочего листа и смотрите в окно кода, вы изначально работаете с событием Worksheet_SelectionChange. Если вы хотите переместить этот код в модуль ThisWorkbook, вы можете поместить его в событие Workbook_SheetSelectionChange.
Если такое «изменение уровня» вашего кода по какой-то причине не сработает, тогда другой подход — создать шаблон рабочего листа внутри книги.
Дайте ему имя, например «MyMaster», и убедитесь, что он включает весь код, который вы хотите добавить в ваши вновь созданные рабочие листы. При желании вы даже можете скрыть этот лист, чтобы он не отвлекал пользователей. Затем поместите следующий макрос в модуль ThisWorkbook:
Private Sub Workbook_NewSheet(ByVal Sh As Object) Dim tmpName As String tmpName = Sh.Name Sheets("MyMaster").Copy Before:=Sheets(Sh.Name) Application.DisplayAlerts = False Sheets(Sh.Name).Delete Application.DisplayAlerts = True Sheets("MyMaster (2)").Name = tmpName End Sub
Этот код запускается каждый раз, когда в книгу добавляется новый лист. Он просматривает имя недавно добавленного рабочего листа (которое будет примерно таким, как «Sheet4») и сохраняет это имя во временной переменной.
Затем код копирует рабочий лист MyMaster в книгу (которая также копирует макросы на листе), удаляет изначально созданный рабочий лист, а затем переименовывает новую копию MyMaster, чтобы она имела то же имя, что и исходный рабочий лист.
_Примечание: _
Если вы хотите узнать, как использовать макросы, описанные на этой странице (или на любой другой странице на сайтах ExcelTips), я подготовил специальную страницу, содержащую полезную информацию.
link: / excelribbon-ExcelTipsMacros [Щелкните здесь, чтобы открыть эту специальную страницу в новой вкладке браузера]
.
ExcelTips — ваш источник экономичного обучения Microsoft Excel.
Этот совет (7884) применим к Microsoft Excel 2007, 2010, 2013, 2016, 2019 и Excel в Office 365. Вы можете найти версию этого совета для старого интерфейса меню Excel здесь:
link: / excel-Copying_Worksheet_Code_Automatically [Автоматическое копирование кода рабочего листа]
.