まず、上の表のように、ワークブックを開いた時の立ち上げマクロ(ThisworkbookのWorkbook_Open)でアドインを開いて初期処理を呼びます。
この時のアドインの「置き場」をどうするかが問題です。一番手っ取り早いのは、呼び出すワークブックと同じフォルダでしょう。このアドインを呼び出すワークブックがいくつあっても、このフォルダにはアドインは一つあれば良い(一つしか置けない)わけで、それぞれのワークブックにマクロを実装するのと比べてもリソース軽減であり、マクロに改廃があってもアドイン一つを上書きコピーすればどのワークブックも新しいアドインで動作することになります。
'***************************************************************************************************
' アドインの動作テスト(ワークブックイベント記述) 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_Open
'* 機能 :ワークブックOpen時イベント
'---------------------------------------------------------------------------------------------------
'* 返り値 :(なし)
'* 引数 :(なし)
'---------------------------------------------------------------------------------------------------
'* 作成日 :2004年11月13日
'* 作成者 :井上 治
'* 更新日 :2019年06月16日
'* 更新者 :井上 治
'* 機能説明:アドインを開き、初期処理マクロを起動する
'* 注意事項:
'***************************************************************************************************
Private Sub Workbook_Open()
'-----------------------------------------------------------------------------------------------
Dim objFso As FileSystemObject ' FileSystemObject
Dim xlAPP As Application ' Excel.Application
Dim objWBK As Workbook ' 本ブック
Dim objSH_SETTEI As Worksheet ' 設定シート
Dim strFilename As String ' ファイル名
Set objFso = New FileSystemObject
Set xlAPP = Application
Set objWBK = ThisWorkbook
Set objSH_SETTEI = objWBK.Worksheets(g_cnsSETTEI)
' アドインが開いたかの判定スイッチをクリア
objSH_SETTEI.Cells(1, 1).Value = "" ' アドインファイル名 ' ①
objSH_SETTEI.Cells(2, 1).Value = "" ' ツールバー名
'-----------------------------------------------------------------------------------------------
strFilename = objFso.BuildPath(objWBK.Path, g_cnsADDIN) ' ②
' アドインの存在確認(このサンプルではワークブックと同じフォルダ)
' ⇒多くのユーザーで共用する場合はそのアドインは共通フォルダに配置すべきです
If Not objFso.FileExists(strFilename) Then
' 指定場所にアドインが存在しない
' ここでエラーにするか、そのままExitさせるかでアドインがない時の処置が違う
' 他の場所からアドインを開くという場合もある
' このサンプルでは設定シートのアドイン有無をクリアしているのでそのまま抜ける
GoTo Open_AddinEXIT
End If
'-----------------------------------------------------------------------------------------------
On Error GoTo Open_AddinError
' アドイン側の初期処理マクロの起動(引数は本ブック名)
Call xlAPP.Run("'" & g_cnsADDIN & "'!InitialProc", objWBK.Name) ' ⑤
GoTo Open_AddinEXIT
'===================================================================================================
' アドインが開かれていない時の処理
Open_AddinError:
' アドインを開く
xlAPP.Workbooks.Open Filename:=strFilename, ReadOnly:=True, Password:=g_cnsPASS ' ③
On Error GoTo 0
' 自ブックをフォアに戻す
objWBK.Activate ' ④
Resume
'===================================================================================================
' 終了
Open_AddinEXIT:
Set objFso = Nothing
End Sub