VBA練習問題
VBA100本ノック 55本目:他ブックのマクロを起動

VBAを100本の練習問題で鍛えます
公開日:2020-12-26 最終更新日:2021-01-13

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


他ブックを開いて、開いたブックのマクロを起動する問題です。


ツイッター連動企画です。
ツイートでの見やすさを考慮して、ブック・シート指定等を適宜省略しています。

VBAテスト用のサンプルデータはご自身でご用意ください。


出題

出題ツイートへのリンク

#VBA100本ノック 55本目
以下のVBAを作成。
・ブックと同一フォルダの"test.xlsm"を「Workbook_Open」を実行せずに開く
・test.xlsmのModule1のFunction multに任意の数値を2つ渡して結果を受け取る
・test.xlsmを閉じる
・受け取った結果をMsgBoxで表示する
※test.xlsmのVBAは画像とリプにて

マクロ VBA 100本ノック


'Bookモジュール
Private Sub Workbook_Open()
  MsgBox "失敗"
End Sub

'Module1
Function mult(num1, num2)
  mult = num1 * num2
End Function


VBA作成タイム

この下に頂いた回答へのリンクと解説を掲載しています。
途中まででも良いので、できるだけ自分でVBAを書いてみましょう。


他の人の回答および解説を見て、書いたVBAを見直してみましょう。


頂いた回答

解説

Workbook_Openを止めるにはApplication.EnableEventsをFalseにします。
他ブックのマクロを起動するには[Application.]Runを使います。
multが他モジュールにも存在する可能性があるならモジュール名で修飾してください。
確実にEnableEventsをTrueに戻すためにOn Errorを入れています。

Sub VBA100_55_01()
  On Error Resume Next
  Application.ScreenUpdating = False
  Application.EnableEvents = False
  
  Dim rtn As Variant, errMsg As String
  With Workbooks.Open(Filename:=ThisWorkbook.Path & "\test.xlsm", ReadOnly:=True)
    If Err.Number = 0 Then
      rtn = Application.Run(.Name & "!mult", 3, 4)
      .Close SaveChanges:=False
    End If
  End With
  
  If Err Then
    MsgBox Err.Description
  Else
    MsgBox rtn
  End If
  
  Application.EnableEvents = True
  Application.ScreenUpdating = True
End Sub


ただしCallとは違い、呼び出し元のOn Errorは、Runで呼び出した先のマクロでは有効にならないので、呼び出し先でエラーがあればVBAは停止します。(文字列を渡してみてください。)
補足はありません。


補足

補足はありません。


サイト内関連ページ

第124回.Workbookのイベントプロシージャー
・Workbookのイベント一覧 ・イベントプロシージャー追加のVBE操作 ・Workbook_Open:Workbookのイベント ・Workbook_BeforeClose:Workbookのイベント ・Workbook_SheetChange:Workbookのイベント
第125回.Worksheetのイベントプロシージャー
・Worksheetのイベント ・イベントプロシージャー追加のVBE操作 ・Activate:Worksheetのイベント ・BeforeDoubleClick:Worksheetのイベント ・BeforeRightClick:Worksheetのイベント ・Change:Worksheetのイベント ・SelectionChange:Worksheetのイベント ・全てのシートまたは複数のシートに対するイベント
第127回.他のブックのマクロを実行(Runメソッド)
・Application.Runメソッド ・Application.Runの使用例 ・Application.Runの必要性




同じテーマ「VBA100本ノック」の記事

52本目:複数シートの一括印刷
53本目:テーブルの扱いと年齢計算
54本目:シートのChangeイベント
55本目:他ブックのマクロを起動
56本目:数式内の自身のシート名を消す
57本目:ファイルの更新日時
58本目:番号リストを簡潔にした文字列で返す
59本目:12ヶ月分のシートを四半期で分割
60本目:「株式会社」の表記ゆれ置換
61本目:「ふりがな」の取得と設定
62本目:独自のZLOOKUP関数を作成


新着記事NEW ・・・新着記事一覧を見る

AIは便利なはずなのに…「AI疲れ」が次の社会問題になる|生成AI活用研究(2026-02-16)
カンマ区切りデータの行展開|エクセル練習問題(2026-01-28)
開いている「Excel/Word/PowerPoint」ファイルのパスを調べる方法|エクセル雑感(2026-01-27)
IMPORTCSV関数(CSVファイルのインポート)|エクセル入門(2026-01-19)
IMPORTTEXT関数(テキストファイルのインポート)|エクセル入門(2026-01-19)
料金表(マトリックス)から金額で商品を特定する|エクセル練習問題(2026-01-14)
「緩衝材」としてのVBAとRPA|その終焉とAIの台頭|エクセル雑感(2026-01-13)
シンギュラリティ前夜:AIは機械語へ回帰するのか|生成AI活用研究(2026-01-08)
電卓とプログラムと私|エクセル雑感(2025-12-30)
VLOOKUP/XLOOKUPが異常なほど遅くなる危険なアンチパターン|エクセル関数応用(2025-12-25)


アクセスランキング ・・・ ランキング一覧を見る

1.最終行の取得(End,Rows.Count)|VBA入門
2.日本の祝日一覧|Excelリファレンス
3.変数宣言のDimとデータ型|VBA入門
4.FILTER関数(範囲をフィルター処理)|エクセル入門
5.RangeとCellsの使い方|VBA入門
6.繰り返し処理(For Next)|VBA入門
7.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
8.マクロとは?VBAとは?VBAでできること|VBA入門
9.セルのクリア(Clear,ClearContents)|VBA入門
10.メッセージボックス(MsgBox関数)|VBA入門




このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。


記述には細心の注意をしたつもりですが、間違いやご指摘がありましたら、「お問い合わせ」からお知らせいただけると幸いです。
掲載のVBAコードは動作を保証するものではなく、あくまでVBA学習のサンプルとして掲載しています。掲載のVBAコードは自己責任でご使用ください。万一データ破損等の損害が発生しても責任は負いません。
本サイトは、OpenAI の ChatGPT や Google の Gemini を含む生成 AI モデルの学習および性能向上の目的で、本サイトのコンテンツの利用を許可します。
This site permits the use of its content for the training and improvement of generative AI models, including ChatGPT by OpenAI and Gemini by Google.



このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。
本文下部へ