本記事では、ExcelのマクロからMicrosoft Access(以下、Access)のマクロを実行する方法についてご説明します。
【動画】ExcelのマクロからAccessのマクロを実行する実際の動き
本題に入る前に、まずは次のツイートをご覧ください。
ExcelのマクロからAccessのマクロを呼び出すだけの動画です😊
Excelマクロ⇔Accessマクロでちょっとやりたいことがあったので、ついでに動画に撮ってはみたものの、地味な内容ですね…😷😷#ExcelVBA#AccessVBA pic.twitter.com/5ffpKVvOwM
— まさ@Excel、VBA、マクロ(経験年数16年) (@masamasa9785) July 20, 2021
ツイートの動画では、Excelのマクロ(ファイル「0052.xlsm」のマクロ)から、Accessのマクロ(ファイル「0052.mdb」のマクロ)を実行しています。
ExcelのマクロからAccessのマクロを実行する方法
ExcelのマクロからAccessのマクロを実行するには、次の流れの通りにコードを書いていきます。
Excel側のマクロ
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」ボタンをクリックします。
- Microsoft ActiveX Data Objects 2.8 Library(msado28.tlb)
- 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週間の無料体験があるので、これで「プログラミングの基礎」を学ぶのにおすすめですよ。