アドイン自身の撤去タイミング

「ツールバー」の撤去は、親となるワークブックが閉じられた時ですが、これには2つの条件があります。

「アドイン」自身を閉じるのは、他に同じアドインを参照しているワークブックがないことを確認する必要があります。

'***************************************************************************************************
'   アドインの動作テスト(ワークブックイベント記述)                  ThisWorkbook(Class)
'
'   作成者:井上治  URL:https://www.ne.jp/asahi/excel/inoue/ [Excelでお仕事!]
'***************************************************************************************************
'   [参照設定]
'   ・Microsoft Scripting Runtime
'***************************************************************************************************
' 変更日付 Rev   変更履歴内容---------------------------------------------------------------------->
' 04/11/13(1.0.0)新規作成
' 19/06/16(1.1.0)*.xlam版アドイン用に再作成
'***************************************************************************************************
Option Explicit
'===================================================================================================
Private Const g_cnsADDIN = "ADDIN_TEST.xlam"                    ' アドインファイル名
Private Const g_cnsSETTEI = "設定"                              ' 設定シート名
Private Const g_cnsPASS = "password"                            ' PW
Private g_swCLOSE As Boolean                                    ' CLOSE判定

'***************************************************************************************************
'   ■■■ ワークブックイベント ■■■
'***************************************************************************************************
'* 処理名 :Workbook_BeforeClose
'* 機能  :ブックClose前イベント
'---------------------------------------------------------------------------------------------------
'* 返り値 :(なし)
'* 引数  :Arg1 = Cancel(Boolean)             ※Ref参照
'---------------------------------------------------------------------------------------------------
'* 作成日 :2004年11月13日
'* 作成者 :井上 治
'* 更新日 :2019年06月16日
'* 更新者 :井上 治
'* 機能説明:ツールバー削除の処理を呼び、必要ならアドインを閉じる
'* 注意事項:
'***************************************************************************************************
Private Sub Workbook_BeforeClose(Cancel As Boolean)
    '-----------------------------------------------------------------------------------------------
    Const cnsTitle As String = "終了処理"
    Dim xlAPP As Application                                        ' Excel.Application
    Dim objWBK As Workbook                                          ' 本ブック
    Dim objSH_SETTEI As Worksheet                                   ' 設定シート
    Set xlAPP = Application
    Set objWBK = ThisWorkbook
    Set objSH_SETTEI = objWBK.Worksheets(g_cnsSETTEI)
    '-----------------------------------------------------------------------------------------------
    ' アドインが開かれていない場合は処理なし
    If objSH_SETTEI.Cells(1, 1).Value <> g_cnsADDIN Then Exit Sub
    '-----------------------------------------------------------------------------------------------
    ' 非保存の確認
    If Not objWBK.ReadOnly Then
        Select Case MsgBox("このブックは保存されていません。" & vbCr & _
            "保存して終了しますか?", vbYesNoCancel, cnsTitle)            ' 
            Case vbYes
                xlAPP.StatusBar = False
                objWBK.Save                 ' 上書き保存                  ' 
            Case vbCancel
                Cancel = True               ' Closeをキャンセル           ' 
                Exit Sub
        End Select
    End If
    '-----------------------------------------------------------------------------------------------
    ' ツールバー削除の処理を呼ぶ(引数は本ブック名) ※アドイン削除指示が返る
    If xlAPP.Run("'" & g_cnsADDIN & "'!ToolBarDelete", objWBK.Name) Then  ' 
        ' アドイン削除指示の時はアドインをCLOSE
        On Error Resume Next
        xlAPP.Workbooks(g_cnsADDIN).Close False                           ' 
    End If
    xlAPP.StatusBar = False
    g_swCLOSE = True
    objWBK.Saved = True                     ' 保存済みにする
End Sub
これは、ワークブック側の「Workbook_BeforeClose」イベント記述のサンプルです。

次項に、ツールバーを持つアドイン動作のサンプルを用意しております。