Tim正确地指出,用户可以右键单击工作表选项卡,然后选择“查看代码”以打开工作表的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_网站上的任何其他页面)中描述的宏,我准备了一个特殊页面,其中包含有用的信息。

_ExcelTips_是您进行经济高效的Microsoft Excel培训的来源。

本技巧(7884)适用于Microsoft Excel 2007、2010、2013、2016、2019和Office 365中的Excel。您可以在此处为Excel的较早菜单界面找到此技巧的版本: