1

我是 vba 新手,我无法理解 vba 中用于 excel 文件的工作簿。我有一个叫做 Addin.xla 的宏,这个宏被 2000 个文件使用。

我遇到的问题是 2000 个文件有自己的那thisworkbook声明函数Workbook_BeforeClose。所有 2000 个文件都具有完全相同的Workbook_BeforeClose.

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

如果是后者,有人可以告诉我如何编写一个循环遍历所有文件并自动更新此功能的宏吗?

4

2 回答 2

3

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

但是,如果您已经在 2000 个文件中有相同的代码,则无论如何您都必须将其删除。否则,它将在您将在插件中定义的处理程序之外运行。

要自动删除:

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

然后循环打开每个文件并执行

With currentWorkBook.VBProject.VBComponents("ThisWorkbook").CodeModule
  .DeleteLines .ProcStartLine("Workbook_BeforeClose", vbext_pk_Proc), .ProcCountLines("Workbook_BeforeClose", vbext_pk_Proc)
End With
于 2012-07-02T13:00:32.573 回答
2

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

Private Sub Workbook_BeforeClose(Cancel As Boolean)
    runCleanupCode
End Sub

runCleanupCode位于您的插件中的位置。这意味着如果您将来想要进行更改,您只需要在插件中进行更改。

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

于 2012-07-02T13:08:12.430 回答