将宏更新为在所有工作表中都相同(或使代码更全球化?)

Updating a macro to be identical across all worksheets (or making the code more global?)

我有一个工作簿,里面有几十个工作sheet,而且还在增加。我可能很快就会得到这本工作簿的副本。

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

我想知道是否有办法:

  1. 制作另一个宏,将宏的更新版本从模板复制到所有其他作品sheet,在此过程中覆盖旧版本

And/or

  1. 将代码从 worksheet_change 移动到一个更全球化的地方,在那里我只需要为每个工作簿更新一个版本(这很好,比更新 20 多个工作要好得多 sheet手动跨即将成为 3 个工作簿...)

解决方案 #2 会更好,因为我认为它更优雅?但我不知道这是否可能。除非我很乐意在节省时间方面获得第一名!

提前致谢。

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

  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. 所以在你的工作中sheet你只需要添加一个通用的调用就像

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

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

    每当您需要更改代码中的某些内容时,您只需要更改一个程序,即 MyGlobalWorksheet_Change,它会立即影响所有您想要的 sheet(但仅 sheet您是否已将调用添加到全局事件中)。

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


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