2007年3月13日火曜日

VBAからマクロを抑止してMDBファイルを開く

COM経由でAccessを操作中に、OpenCurrentDatabaseを使用してMDBファイルを開いた場合、自動実行マクロが設定されていると、勝手に動いてしまい意図しない振舞をしてしまう場合がある。

Excelでは、EnableEventというプロパティにより、イベントを抑止することができるが、Accessにはこの趣旨のプロパティは存在していないようだ。

オンデマンドでACCESSを操作している場合には、MDBを開く際にShiftキーを押しっぱなしにすることで、自動実行を抑止できる。

そこで、無理やりながら、Shiftキーの押下をエミュレートした状態で、OpenCurrentDatabaseすることにより自動実行を抑止する。
これにはkeybd_eventというWin32APIを利用する。

Call keybd_event(CByte(VbKeyShift), 0, 0, 0)
Call objAccess.OpenCurrentDatabase("hoge.mdb")
Call keybd_evnet(Cbyte(VbKeyShift), 0, 2, 0)

これで、Shiftキーが押下された状態でのMDBオープンがエミュレートできるため、自動実行の抑止が可能である。

#Win32APIの宣言を別途すること。