Vba 在所有工作表中将宏更新为相同(或使代码更全局?)
我有一本有几十张工作表的工作簿,而且还在增长。我可能很快就会得到这本工作簿的副本 每个工作表都基于相同的工作表模板,该模板在其Vba 在所有工作表中将宏更新为相同(或使代码更全局?),vba,excel,copy,vbe,Vba,Excel,Copy,Vbe,我有一本有几十张工作表的工作簿,而且还在增长。我可能很快就会得到这本工作簿的副本 每个工作表都基于相同的工作表模板,该模板在其工作表\u Change事件中包含一个宏,用于自动计算。随着我改进工作簿和添加功能,以及添加工作表,将更新的宏复制粘贴到所有工作表所需的时间越来越长 我想知道是否有办法: 制作另一个宏,将该宏的更新版本从模板复制到所有其他工作表,并在此过程中覆盖旧版本 和/或 将代码从工作表_change移动到一个更全局的地方,在那里我只需要更新每个工作簿的一个版本(这很好,比手动更新即
工作表\u Change
事件中包含一个宏,用于自动计算。随着我改进工作簿和添加功能,以及添加工作表,将更新的宏复制粘贴到所有工作表所需的时间越来越长
我想知道是否有办法:
提前感谢。如果我们讨论的是一个工作簿和多个工作表,那么一个简单的方法(解决更新问题)是:
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
调用全局过程。因此,无需更改工作表\u Change
事件,但只需添加一次即可
每当您需要在代码处更改某些内容时,您只需要更改一个过程,即MyGlobalWorksheet\u change
,它会一次影响您所需的所有工作表(但只影响您向全局事件添加调用的工作表)另一种方法是在
thiswoolk
范围内使用Workbook\u SheetChange
事件。但这将影响工作簿中的任何工作表。以前的解决方案只会通过添加调用影响您选择的工作簿。当工作簿中的任何工作表发生更改时,有一些方法可以触发事件。这样合适吗?如果是这样,代码只需要存在于工作簿级别。请查找XLAM(Excel加载项)文件的内容和作用。但是,如果希望在单元格内容更改时进行更改,则必须使用“工作表更改”事件。也许如果你发布了一些代码,有人会看到其中是否有可以优化的。按照@JoeyGrant的建议,在工作表模块中,每个工作表都没有更改事件代码,您只需在此工作簿模块上放置一个更改事件代码
,即可用于工作簿中的所有工作表。当然,您需要从各个工作表模块中删除更改事件代码。您应该能够通过VBA将宏添加到工作簿中,但是这需要对您和同事的Excel Trust Center进行一些更改。因此,更倾向于使用AddIn。对于自动加载项更新,您可能需要使用批处理文件将更高版本复制到用户配置文件中。但是,实际上取决于此主文件和要执行的操作之间的关系,最终可能会将宏拆分为加载项和启用宏的模板。这是需要时间的设计!