2012-07-02 66 views
1

我是新來的vba,我有問題了解excel文件的vba中的工作簿。 我有一個名爲Addin.xla的宏,這個宏被2000個文件使用。使excel文件與vba使用全局工作簿功能?

我的問題是,2000年的文件有自己的thisworkbook這就是說函數Workbook_BeforeClose。所有2000個文件都具有完全相同的Workbook_BeforeClose

我想要做的是在所有2000個文件中更改Workbook_BeforeClose函數。我可以使用Addin.xla文件中的Workbook_BeforeClose函數來創建文件,還是必須更改所有2000個文件的相同Workbook_BeforeClose函數?

如果後面是這種情況,有人能告訴我如何編寫一個循環遍歷所有文件並自動更新此函數的宏嗎?

回答

2

一種解決方案是將功能委託給插件:

Private Sub Workbook_BeforeClose(Cancel As Boolean) 
    runCleanupCode 
End Sub 

其中runCleanupCode是loc在你的插件中。這意味着如果你想在未來做出改變,你只需要將它們放在插件中即可。

要更改所有工作表中的代碼,您可以按照this example

+0

我認爲他需要使用Application Workbook_BeforeClose事件而不是Addin Workbook_beforeClose事件。 –

+0

@CharlesWilliams我可能不清楚:'Workbook_BeforeClose'在單個文件中,只有'runCleanupCode'在插件中。 – assylias

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 
相關問題