以下の内容はhttps://www.limecode.jp/entry/fungo/055-application-runより取得しました。


55本目:他ブックのマクロを起動

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の位置はバリエーションがあると思いますので、
本コードも一つの参考として眺めてみてください。




以上の内容はhttps://www.limecode.jp/entry/fungo/055-application-runより取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14