1

私は自分のアドインWorkbook_BeforeCloseに ' This Workbook' を持っています。同じ Excel インスタンスで複数のワークブックを開き、それぞれを閉じようWorkbook_BeforeCloseとすると、インスタンスで開いているそのようなワークブックごとに呼び出されるのではなく、最終的なワークブックに対してのみ呼び出されます。

Workbook_BeforeCloseワークブックを閉じるたびにタスクを実行する必要がある Excel インスタンスのすべてのワークブックを呼び出す方法はありますか?

4

2 に答える 2

3

従うべきいくつかの手順があります。

  1. Excel IDE/VBA 環境でクラス モジュールを作成します。最後まで開いたままにするワークブックの1つでそれを行います。

  2. クラスモジュール名をに変更AppClass

  3. このコードを中に入れますAppClass module

    Public WithEvents EXL As Application
    Private Sub EXL_WorkbookBeforeClose(ByVal Wb As Workbook, Cancel As Boolean)
        'sample msgbox
        MsgBox "You are about to close Workbook: " & Wb.Name
        'here your code
    End Sub
    
  4. などの標準モジュールにModule1、次のコードを挿入します。

    Public appEXL As New AppClass
    Sub Required_Initialization()
        'run it once or run it when this workbook is opened
        Set appEXL.EXL = Application
    End Sub
    
  5. 4 番目の手順で作成したサブを実行します。

  6. いくつかのテストを行います: a) 新しい空のワークブックを作成し、次にそれを閉じます。閉じようとしているブックの名前を呼び出す MgBox が表示されます。

  7. 必要に応じて調整してください。

重要!クラスは、VBA プログラミングのかなり難しい部分です。理解を深めるために、ウェブで追加情報を検索してみてください。

于 2013-06-01T13:00:46.073 に答える
0

KazJaw の答えは素晴らしいアイデアです。

彼が概説した手法を使用して、次のコードを含むアプリケーション スコープのアドインがあります。

Private Sub xlApp_WorkbookOpen(ByVal Wb As Excel.Workbook)

    On Error GoTo NoBookOpen:
        If Application.Calculation = xlCalculationManual And LCase(Left(ActiveWorkbook.Name, 6)) <> "export" Then
            If MsgBox("Calculation is set to Manual!" & vbCrLf & _
            "It will now be put back to Automatic", vbYesNo, "CALCULATION") = vbYes Then
                  Application.Calculation = xlCalculationAutomatic
            End If
        End If
NoBookOpen:

End Sub

このアドインは Excel のすべてのインスタンスに存在しますが、Kazjaw のアイデアを使用して、アドインを Excel の特定のインスタンスにのみ読み込むことができます。

于 2013-06-01T18:18:52.047 に答える