我有一个包含几十个工作表的工作簿,它正在增长。我可能很快就会得到这个工作簿的副本。
每个工作表都基于相同的工作表模板,该模板包括一个宏,用于自动计算Worksheet_Change
事件。随着我改进工作簿并添加功能并添加工作表,将更新的宏复制粘贴到所有工作表所需的时间越来越长。
我想知道是否有办法:
- 创建另一个宏,将宏的更新版本从模板复制到所有其他工作表,覆盖过程中的旧版本
和/或
- 将代码从worksheet_change移动到更全局的地方,我只需要为每个工作簿更新它的一个版本(这很好,比在即将成为 20 个工作簿中手动更新 3+ 工作表要好得多......
解决方案#2会更好,因为我认为更优雅?但我不知道这是否可能。除非我很乐意将#1用于节省时间方面!
提前谢谢你。
如果我们谈论的是具有多个工作表的一个工作簿,那么一个简单的方法(解决更新问题)将是:
-
添加一个模块并编写一个包含原始变更事件代码的过程:
Option Explicit Public Sub MyGlobalWorksheet_Change(ByVal Target As Range) ' here the code from your orignal Worksheet_Change. ' make sure you reference worksheets correctly ' the worksheet can eg be addressed like ' set ws = Target.Parent End Sub
-
因此,在您的工作表中,您只需要添加一个通用调用,例如
Option Explicit Private Sub Worksheet_Change(ByVal Target As Range) MyGlobalWorksheet_Change Target End Sub
以调用全局过程。因此,
Worksheet_Change
事件永远不需要更改,但您只需添加一次即可。每当您需要更改代码中的某些内容时,您只需要更改一个
MyGlobalWorksheet_Change
的过程,它一次影响所有您想要的工作表(但只有您向全局事件添加调用的工作表)。
请记住,一遍又一遍地复制相同的代码总是一个坏主意,因为它很难维护。相反,始终使用一次又一次调用的一个过程。
另一种方法是在ThisWorkbook
范围内使用Workbook_SheetChange
事件。但这会影响工作簿中的任何工作表。以前的解决方案只会通过添加调用来影响您选择的工作簿。