更新所有工作表中的宏是相同的(或使代码更全局?)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了更新所有工作表中的宏是相同的(或使代码更全局?)相关的知识,希望对你有一定的参考价值。

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

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

我想知道是否有办法:

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

和/或

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

解决方案#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过程,它会立即影响所有需要的工作表(但只有工作表添加了对全局事件的调用)。

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


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

以上是关于更新所有工作表中的宏是相同的(或使代码更全局?)的主要内容,如果未能解决你的问题,请参考以下文章

如何以编程方式查找所谓的宏

用于替换表中的值的宏

Excel里的宏有啥作用?

c语言中的“宏”是指啥?

c语言中的“宏”是指啥?

使用VBA从单词表中删除列