【AccessVBA】AccessのマクロからExcelのマクロを実行するには

この記事では、AccessのマクロからExcelのマクロを実行する方法についてご説明します。

【動画】AccessのマクロからExcelのマクロを実行する実際の動き

本題に入る前に、まずは次の動画をご覧ください。


まずはAccessのマクロがExcelアプリケーションのインスタンスを生成します。

次に、実行したいマクロがあるExcelファイルを参照してそのExcelファイルのマクロを呼び出して実行しています。

マクロ作成の流れ

STEP.1
‘Excelアプリケーションのインスタンスを生成します。
このConnectionオブジェクトのインスタンスが生成されていないとAccessのマクロがExcelにアクセスすることができないので必ず生成しておきます。
STEP.2
実行したいマクロがあるExcelのファイル名をフルパスで取得する
実行したいマクロがあるExcelのファイル名をフルパスで取得します。
STEP.3
Excelのマクロを実行する
Excelのマクロを実行します。
STEP.4
Quitメソッドを実行してExcelを終了する
Quitメソッドを実行してExcelを終了します。

コードの例

Accessのマクロのコード(例)

Option Compare Database

Sub test()
        
    Dim objExcel    As Object       'Excelアプリケーションのインスタンス用オブジェクト変数
    Dim excelFile   As Object       '実行したいマクロがあるExcelファイル用変数
    
    'Excelアプリケーションのインスタンスを生成する
    Set objExcel = CreateObject("Excel.Application")
    
    '実行したいマクロがあるExcelのファイル名をフルパスで取得する
    Set excelFile = objExcel.Workbooks.Open(Application.CurrentProject.Path & "\" & "work.xlsm")
    
    'Excelのマクロを実行する(モジュール名:sheet_work、マクロ名:test)
    objExcel.Run excelFile.Name & "!sheet_work.test"
    
    'Excelファイルを保存する
    excelFile.Save
    
    'Excelを終了する
    objExcel.Quit
    
    '後処理
    Set objExcel = Nothing
    Set excelFile = Nothing

End Sub

注目すべきコード①

最初に見て頂きたいのは9行目です。

    'Excelアプリケーションのインスタンスを生成する
    Set objExcel = CreateObject("Excel.Application")

以上のコードは、CreateObjectを使ってExcelアプリケーションのインスタンスを生成するコードです。

このインスタンスを生成することにより、Excelのマクロを呼び出すことができるようになります。

注目すべきコード②

次に見て頂きたいのは12行目です。

    '実行したいマクロがあるExcelのファイル名をフルパスで取得する
    Set excelFile = objExcel.Workbooks.Open(Application.CurrentProject.Path & "\" & "work.xlsm")

以上のコードは、実行したいマクロがあるExcelファイル名をフルパスで取得しているコードです。

Openメソッドに、実行したいマクロがあるExcelファイル名をフルパスを指定して実行しています。

以上でAccessのマクロがExcelのマクロを実行するための前準備が完了しました。

注目すべきコード③

次に見て頂きたいのは15行目です。

    'Excelのマクロを実行する(モジュール名:sheet_work、マクロ名:test)
    objExcel.Run excelFile.Name & "!sheet_work.test"

以上のコードは、AccessのマクロがExcelのマクロを実行するコードです。

ExcelアプリケーションインスタンスのRunメソッドの第1引数に、次の情報を結合させて指定し実行します。

  1. 実行したいマクロがあるExcelファイル名(フルパスで指定しない)
  2. !
  3. モジュール名
  4. .
  5. Excelのマクロ名
(例)
work.xlsm!sheet_work.test

注目すべきコード④

次に見て頂きたいのは18行目です。

    'Excelファイルを保存する
    excelFile.Save

以上のコードは、実行したいマクロがあるExcelファイルを保存する処理のコードです。

今回サンプルで用意した実行したいマクロがあるExcelファイルは、マクロ実行後にシートの内容を保存したいのでSaveメソッドを実行しています。

注目すべきコード⑤

次に見て頂きたいのは21行目です。

    'Excelを終了する
    objExcel.Quit

以上のコードは、開いたExcelファイルを閉じる処理のコードです。

Quitメソッドを実行しないとExcelファイルが開いたまま残ってしまうので、必ずQuitを実行しておきます。

動作確認

今回はAccess側のマクロから、以下の記事のExcelマクロを呼び出して実行します。

【ExcelVBA】ExcelのマクロからAccessのクエリを実行してデータを取得する方法(ヘッダあり)

なおAccess側のマクロから呼び出すのは、「test」というExcelのマクロになります。

実行結果は以上のExcelマクロと同じになります。

マクロ実行前

今回用意したExcelファイルは以下で、セル「aName」に「Q_都道府県取得クエリ」というクエリ名が入力されています。

Accessにあるこの「Q_都道府県取得クエリ」をマクロが呼び出して取得したデータをExcelのシートに出力します。

マクロ実行後

マクロを実行すると、ExcelのシートにAccessのクエリ「Q_都道府県取得クエリ」の実行結果が出力されました。

最後に

本記事では、AccessのマクロからExcelのマクロを実行する方法についてご説明しました。

もしAccessのマクロからExcelのマクロを実行したい場合は本記事を参考にしてみてくださいね。

Excelのスキル向上やExcelの基礎知識をしっかりと学びたいなら

Excelのスキルを習得したい、Excelの基礎知識をもっと理解したい、そう考えているなら「無期限サポート付きExcel講座【すごい改善】」がおすすめです。

Excelのスキルの基礎を身につけるなら【すごい改善】で無期限サポート付きがあるので、これで「Excelのスキルや基礎」を学ぶのにおすすめですよ。

→ 受講後、何度でも無期限でメールで質問できるアフターサポートがついているExcelマスター講座はこちら