質問: CreateObject("Access.Application") AcApp.OpenCurrentDatabase FileFullPath select case AcApp.Run ("Macro") ``` ### 試したこと マイクロソフトの以下によるとランタイム版を一度オープンしてgetObjectすればよいとのことですが サイトの情報が古いようで拡張子も異なっており オープン文をどのように変更すればよいかわからないでいます。 (拡張子はaccdbですし、system.mdwというファイルも見当たりません) https://support.microsoft.com/ja-jp/kb/145707 ### 補足情報(言語/FW/ツール等のバージョンなど) 開発:access2013 ランタイム:access2016
回答: 手元にRuntime環境がないのでRuntime版での動作は未検証ですが、以下のような流れでできるのではないかと思います。 ``` Dim objShell Set objShell = CreateObject( "WScript.Shell" ) Dim strFileFullPath strFileFullPath = "C:\test.accdb" 'Access起動 objShell.Run strFileFullPath '& " /Runtime" 'Accessオブジェクトの取得 Dim AcApp Set AcApp = GetObject(strFileFullPath) If AcApp is Nothing Then Msgbox "Get NG" WScript.Quit End If 'VBAマクロ実行 AcApp.Run "Macro" AcApp.Quit Set AcApp = Nothing ``` ちなみに私の環境ではAccess起動の部分でMDBをShell起動しなくても、GetObjectだけで対象のMDBファイルが開かれるようでした。 このため上記コードをそのまま実行すると、目的のMDBファイルがShell起動とGetObjectで2重に開かれてしまいました。 処理終了時の`AcApp.Quit`ではGetObjectで開かれたMDBのみ閉じており、Shell起動のMDBはそのまま残ってしまうため、Shell起動部分をコメントアウトすることで正常動作となりました。 当方の環境は正規版Accessのため参考にはならないかもしれませんが、一応の動作報告です。 参考になれば幸いです。