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

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

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

本題に入る前に、まずは次のツイートをご覧ください。

ツイートの動画では、Excelのマクロ(ファイル「0052.xlsm」のマクロ)から、Accessのマクロ(ファイル「0052.mdb」のマクロ)を実行しています。

ExcelのマクロからAccessのマクロを実行する方法

ExcelのマクロからAccessのマクロを実行するには、次の流れの通りにコードを書いていきます。

Excel側のマクロ

STEP.1
CSVファイルのデータをインポートするAccessのファイル名の取得
CSVファイルのデータをインポートするAccessのファイル名を取得します。
STEP.2
Accessへの接続情報の取得
Accessへの接続情報を取得します。
STEP.3
Accessに接続
Accessに接続します。
STEP.4
Accessのファイルを開く
Accessのファイルを開きます。
STEP.5
Accessのマクロ名の取得
Accessのマクロ名を取得します。
STEP.6
Accessのマクロを呼び出す
Accessのマクロを呼び出します。

Access側のマクロ

※今回のサンプルでは、Access側の主な処理は無しとします。(Excel側のマクロから呼び出されるだけ)

コードの例

Excel側のマクロのコード(例)

    Dim strFileName As String, accMacro As String
    Dim adoCON      As New ADODB.Connection
    Dim accApp      As New Access.Application
    
    'カレントディレクトリのデータベースパスを取得
    strFileName = ActiveWorkbook.Path & "\" & "0052.mdb"
    
    'Microsoft Accessへの接続情報を取得する
    adoCON.ConnectionString = "provider=Microsoft.ACE.OLEDB.12.0;" _
                            & "Data Source=" _
                            & strFileName & ""
                            
    'Accessに接続する
    adoCON.Open
    
    'Accessファイルを開く
    Set accApp = GetObject(strFileName)
    
    'Accessのマクロ名を取得する
    accMacro = "macro1"
    
    'Accessのマクロを呼び出す
    accApp.Run accMacro

    '後処理
    Set adoCON = Nothing
    Set accApp = Nothing

コードの解説

注目すべきコード①

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

RunメソッドにAccessのマクロ名をパラメタに指定し、Accessのマクロを呼び出しています。

ここでExcel側のマクロはいったん中断されて、呼び出したAccess側のマクロの処理が行われます。

なお、呼び出されたAccessのマクロの処理が終わるまでは、Excel側のマクロの後続処理は行われません。

Accessのマクロの処理が終わるとExcel側のマクロに戻り、残りの処理が行われます。

注目すべきコード②

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

GetObject関数にAccessファイルをパラメタに指定することで、Accessファイルが開きます。

Accessファイルを開き、Accessファイルのマクロを呼び出します。

注目すべきコード③

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

ここでExcelのマクロがAccessに接続します。

Accessに接続するのに必要な情報を10行目で取得してAccessに接続します。

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

Sub macro1()

End Sub

以上はサンプルのコードですが、Excel側のマクロから呼び出されます。

【注意】参照設定が必要です

一つ注意点があるのですが、先ほどのコードを動かすには参照設定が必要です。

参照設定の一覧(下の画像を参考)から次の項目(ライブラリ)にチェックを付けて「OK」ボタンをクリックします。

  1. Microsoft ActiveX Data Objects 2.8 Library(msado28.tlb)
  2. Microsoft Access 15.0 Object Library(MSACC.OLB)

なぜ必要かというと、先ほどのコードの2行目の「ADODB.Connection」というオブジェクトが「msado28.tlb」というファイルを、3行目の「Access.Application」が「MSACC.OLB」というファイルを参照するからです。

    Dim adoCON      As New ADODB.Connection
    Dim accApp      As New Access.Application

この参照設定をしないと下の画像のエラーが出ますので必ず行う必要があります。

ここでは「msado28.tlb」と「MSACC.OLB」とは何者かについては記事の本題から逸れてしまうので詳細は割愛しますが、Excelのマクロで「ADODB.Connection」と「Access.Application」というオブジェクトを使う場合は参照設定しないと動かない、程度に思って頂ければと思います。

最後に

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

ExcelのマクロからAccessのマクロを実行する流れは次の通りです。

  • ①Excel側のマクロがAccessのファイルに接続
  • ②GetObject関数を使ってAccessのファイルを起動(表示)
  • ③Excel側のマクロがAccessのマクロを呼び出して実行

ExcelのマクロからAccessのマクロを実行したい場合は、ぜひ参考にしてみてくださいね。

プログラミングのスキルを習得するなら

プログラミングのスキルを習得したい、今のスキルをもっと高めたい、そう考えているなら「プログラミングスクール」がおすすめです。

プログラミングのスキルの基礎を身につけるなら「TechAcademy」で1週間の無料体験があるので、これで「プログラミングの基礎」を学ぶのにおすすめですよ。

→ TechAcademyの「1週間 無料体験」はこちら