将宏更新为在所有工作表中都相同(或使代码更全球化?)
Updating a macro to be identical across all worksheets (or making the code more global?)
我有一个工作簿,里面有几十个工作sheet,而且还在增加。我可能很快就会得到这本工作簿的副本。
每个 sheet 都基于相同的工作sheet 模板,该模板在其 Worksheet_Change
事件中包含一个用于自动计算的宏。随着我改进工作簿并添加功能,并且添加了 sheet,将更新的宏复制粘贴到所有 sheet 所花费的时间越来越长。
我想知道是否有办法:
- 制作另一个宏,将宏的更新版本从模板复制到所有其他作品sheet,在此过程中覆盖旧版本
And/or
- 将代码从 worksheet_change 移动到一个更全球化的地方,在那里我只需要为每个工作簿更新一个版本(这很好,比更新 20 多个工作要好得多 sheet手动跨即将成为 3 个工作簿...)
解决方案 #2 会更好,因为我认为它更优雅?但我不知道这是否可能。除非我很乐意在节省时间方面获得第一名!
提前致谢。
如果我们谈论一个工作簿有多个工作sheet,那么一个简单的方法(解决更新问题)是:
添加模块并编写包含原始更改事件代码的过程:
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
所以在你的工作中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。以前的解决方案只会影响您通过添加调用选择的工作簿。
我有一个工作簿,里面有几十个工作sheet,而且还在增加。我可能很快就会得到这本工作簿的副本。
每个 sheet 都基于相同的工作sheet 模板,该模板在其 Worksheet_Change
事件中包含一个用于自动计算的宏。随着我改进工作簿并添加功能,并且添加了 sheet,将更新的宏复制粘贴到所有 sheet 所花费的时间越来越长。
我想知道是否有办法:
- 制作另一个宏,将宏的更新版本从模板复制到所有其他作品sheet,在此过程中覆盖旧版本
And/or
- 将代码从 worksheet_change 移动到一个更全球化的地方,在那里我只需要为每个工作簿更新一个版本(这很好,比更新 20 多个工作要好得多 sheet手动跨即将成为 3 个工作簿...)
解决方案 #2 会更好,因为我认为它更优雅?但我不知道这是否可能。除非我很乐意在节省时间方面获得第一名!
提前致谢。
如果我们谈论一个工作簿有多个工作sheet,那么一个简单的方法(解决更新问题)是:
添加模块并编写包含原始更改事件代码的过程:
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
所以在你的工作中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。以前的解决方案只会影响您通过添加调用选择的工作簿。