広告

【プチネタ】Excel側からAccessマクロを動かすApplication.Runメソッド(Access)のエラー

Office365への移行にあたり、ExcelVBAツールのコード内にあったApplication.Runメソッド(Access)で実行時エラー 40351が発生。その修正作業時のメモ。

状況

  • ExcelVBAのツール側からAccessに指示を出して、プロシージャを実行させるというプログラム
  • サンプルコードにすると下記のような状況(「サンプル.accdb」に登録されている「プロシージャ_A」を実行させる)
Dim ObjAccess As Object

    Set ObjAccess = CreateObject("Access.Application")
    
        ObjAccess.OpenCurrentDatabase (ThisWorkbook.Path & "\サンプル.accdb")
        
        ObjAccess.Run "プロシージャ_A" →ここで実行時エラー 40351が発生!
        
        ObjAccess.CloseCurrentDatabase
    
    Set ObjAccess = Nothing

End Sub

修正1回目(失敗)

Microsoft公式サイトのApplication.Runメソッド(Access)の解説ページを見てみると、
「別のデータベースでプロシージャを呼び出す場合は、プロジェクト名とプロシージャ名を~(中略)~ドットで区切って使用」とある。ふむふむ、ならばこれでどうだ?

    Set ObjAccess = CreateObject("Access.Application")
    
        ObjAccess.OpenCurrentDatabase (ThisWorkbook.Path & "\サンプル.accdb")
        
        ObjAccess.Run "サンプル.プロシージャ_A" →が、またしてもエラー!
        
        ObjAccess.CloseCurrentDatabase
    
    Set ObjAccess = Nothing

解決方法

で、もう一度Microsoft公式サイトをよく読むと、「プロジェクト名と~」←ん!ファイル名じゃなかった~!早速問題のAccessファイルのVBEで「プロジェクト名」を確認すると、
VBEの「ツール」タブ→「●●●のプロパティ」をクリック(その「●●●」がプロジェクト名なワケですね)

「プロジェクト名」を編集してVBAコードに合わせる。Or、プロジェクト名の通りにVBAのコード側を修正すればOK。
件のツールでは、プロジェクト名が「Database」になっていました。
そして「ファイル名」と「プロジェクト名」が同じになるように修正して、再度テストしてみたところ、無事エラーは解消されました。