make excel文件使用vba的全局工作簿函数?

时间:2012-07-02 12:55:07

标签: vba excel

我是vba的新手,我在使用excel文件了解vba中的工作簿时遇到了问题。 我有一个名为Addin.xla的宏,这个宏由2000个文件使用。

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

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

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

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:2)

一种解决方案是将功能委托给插件:

Private Sub Workbook_BeforeClose(Cancel As Boolean)
    runCleanupCode
End Sub

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

要更改所有工作表中的代码,您可以关注this example