使excel文件与vba使用全局工作簿function?

我是新来的VBA和我有问题了解在Excel文件的VBA的工作簿。 我有一个名为Addin.xla的macros,这个macros被2000个文件使用。

我有的问题是,2000年的文件有它自己的这thisworkbook这宣告了函数Workbook_BeforeClose 。 所有的2000文件都有完全相同的Workbook_BeforeClose

我想要做的是在所有的2000文件中更改Workbook_BeforeClose函数。 我可以使文件在Addin.xla文件中使用Workbook_BeforeClose函数,还是必须更改所有2000个文件的相同Workbook_BeforeClose函数?

如果后者是这样的话,有人可以告诉我如何编写一个循环遍历所有文件的macros,并自动更新这个function?

一种解决scheme是将函数委托给插件:

 Private Sub Workbook_BeforeClose(Cancel As Boolean) runCleanupCode End Sub 

runCleanupCode位于你的插件中。 这意味着如果你想在未来做出改变,你只需要把它们放在插件里。

要更改所有工作表中的代码,可以按照此示例进行操作 。

在插件中,处理Application.WorkbookBeforeClose事件。

但是,如果你已经在2000年的文件中有相同的代码,那么你将不得不删除它。 否则,除了您将在插件中定义的处理程序之外,它还将运行。

自动删除:

添加对Microsoft Visual Basic for Applications Extensibility XX的引用

然后在循环中打开每个文件,然后执行

 With currentWorkBook.VBProject.VBComponents("ThisWorkbook").CodeModule .DeleteLines .ProcStartLine("Workbook_BeforeClose", vbext_pk_Proc), .ProcCountLines("Workbook_BeforeClose", vbext_pk_Proc) End With