Тим правильно отмечает, что пользователь может щелкнуть правой кнопкой мыши вкладку рабочего листа, а затем выбрать «Просмотреть код», чтобы открыть лист кода 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 [Автоматическое копирование кода рабочего листа].