更新所有工作表中的宏是相同的(或使代码更全局?)
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了更新所有工作表中的宏是相同的(或使代码更全局?)相关的知识,希望对你有一定的参考价值。
我有一个包含几十个工作表的工作簿,这些工作表正在增长。我很快就会得到这本工作簿的副本。
每个工作表都基于相同的工作表模板,其中包含用于自动计算的Worksheet_Change
事件的宏。随着我改进工作簿并添加功能,并添加了工作表,将更新的宏复制粘贴到所有工作表需要更长时间。
我想知道是否有办法:
- 创建另一个宏,将宏的更新版本从模板复制到所有其他工作表,覆盖过程中的旧版本
和/或
- 将代码从worksheet_change移动到一个更全局的地方,我只需要为每个工作簿更新一个版本(这比在即将到来的3个工作簿中手动更新20多个工作表要好得多......)
解决方案#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
过程,它会立即影响所有需要的工作表(但只有工作表添加了对全局事件的调用)。
请记住,一遍又一遍地复制相同的代码总是一个坏主意,因为它很难维护。相反,总是使用一次又一次调用的程序。
另一种方法是在Workbook_SheetChange
范围内使用ThisWorkbook
事件。但这会影响工作簿中的任何工作表。以前的解决方案只会影响您通过添加呼叫选择的工作簿。
以上是关于更新所有工作表中的宏是相同的(或使代码更全局?)的主要内容,如果未能解决你的问题,请参考以下文章