1

私はvbaを初めて使用し、Excelファイル用のvbaのワークブックを理解するのに問題があります. Addin.xla というマクロがあります。このマクロは 2000 個のファイルで使用されています。

thisworkbook私が抱えている問題は、2000 個のファイルに function を宣言する独自のファイルがあることWorkbook_BeforeCloseです。2000 個のファイルはすべて、まったく同じWorkbook_BeforeClose.

私がやりたいのはWorkbook_BeforeClose、2000 個のファイルすべての関数を変更することです。Workbook_BeforeCloseファイルで Addin.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

1つの解決策は、関数をアドインに委任することです。

Private Sub Workbook_BeforeClose(Cancel As Boolean)
    runCleanupCode
End Sub

runCleanupCodeアドインのどこにありますか。つまり、将来変更を加える場合は、アドインで変更するだけで済みます。

すべてのシートのコードを変更するには、次のに従います。

于 2012-07-02T13:08:12.430 に答える