Excel&VBA解説サイト「エクセルの神髄」様出題の問題集、
「VBA100本ノック」に対する私の回答と解説のページです。
100本ノックの出題リストはこちらから
excel-ubara.com
出題:他ブックのマクロを起動
#VBA100本ノック 55本目
以下のVBAを作成。
・ブックと同一フォルダの"test.xlsm"を「Workbook_Open」を実行せずに開く
・test.xlsmのModule1のFunction multに任意の数値を2つ渡して結果を受け取る
・test.xlsmを閉じる
・受け取った結果をMsgBoxで表示する
※test.xlsmのVBAは画像とリプにて

◇ 出題ページはこちら
ソースコード
Option Explicit ' 100本ノック055:他ブックのマクロを起動 Sub testブックのmult関数を実行する() Dim 結果値 As Variant Dim マクロブック As Workbook On Error Resume Next Application.EnableEvents = False Set マクロブック = Workbooks.Open(Filename:=ThisWorkbook.Path & "\test.xlsm", ReadOnly:=True) Application.EnableEvents = True If Err.Number > 0 Then MsgBox "以下のエラーによりブックが開けませんでした。" & vbLf & Err.Description Exit Sub End If On Error GoTo 0 結果値 = Application.Run(マクロブック.Name & "!Module1.mult", 1, 2) マクロブック.Close False MsgBox 結果値 End Sub
解説
Application.Runメソッドを用いて別ブックのマクロを実行する問題です。
Workbook_Openを実行させずに他ブックを開くために、
Application.EnableEventsも併用する必要がありますね。
今回はこの二つを使う基本的なコードの問題でしたので、
特に解説は不要と思います。
On Error Resume NextやEnableEventsの位置はバリエーションがあると思いますので、
本コードも一つの参考として眺めてみてください。