更新宏以在所有工作表中相同(或使代码更加全局?



我有一个包含几十个工作表的工作簿,它正在增长。我可能很快就会得到这个工作簿的副本。

每个工作表都基于相同的工作表模板,该模板包括一个宏,用于自动计算Worksheet_Change事件。随着我改进工作簿并添加功能并添加工作表,将更新的宏复制粘贴到所有工作表所需的时间越来越长。

我想知道是否有办法:

  1. 创建另一个宏,将宏的更新版本从模板复制到所有其他工作表,覆盖过程中的旧版本

和/或

  1. 将代码从worksheet_change移动到更全局的地方,我只需要为每个工作簿更新它的一个版本(这很好,比在即将成为 20 个工作簿中手动更新 3+ 工作表要好得多......

解决方案#2会更好,因为我认为更优雅?但我不知道这是否可能。除非我很乐意将#1用于节省时间方面!

提前谢谢你。

如果我们谈论的是具有多个工作表的一个工作簿,那么一个简单的方法(解决更新问题)将是:

  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
    
  2. 因此,在您的工作表中,您只需要添加一个通用调用,例如

    Option Explicit
    Private Sub Worksheet_Change(ByVal Target As Range)
    MyGlobalWorksheet_Change Target
    End Sub
    

    以调用全局过程。因此,Worksheet_Change事件永远不需要更改,但您只需添加一次即可。

    每当您需要更改代码中的某些内容时,您只需要更改一个MyGlobalWorksheet_Change的过程,它一次影响所有您想要的工作表(但只有您向全局事件添加调用的工作表)。

请记住,一遍又一遍地复制相同的代码总是一个坏主意,因为它很难维护。相反,始终使用一次又一次调用的一个过程。


另一种方法是在ThisWorkbook范围内使用Workbook_SheetChange事件。但这会影响工作簿中的任何工作表。以前的解决方案只会通过添加调用来影响您选择的工作簿。

最新更新