qiitaってめっちゃすごい内容じゃなくても技術的なアレなら書いていいんだよね?
以前ExcelVBAでaccessのVBAを呼び出す機会があって、
コードはこんな感じ
dim obja as object
Set obja = CreateObject("Access.Application")
obja.OpenCurrentDatabase "パス名"
obja.Run "モジュール名" "引数1" "引数2"
Set obja = Nothing
で、呼び出されるモジュールの最後にdocmd.quitしてもプロセスが残り続けたのよね。
タスクマネージャで強制終了したらうまくいくんだけど、ユーザー側にタスクマネージャを触らせるのはあり得ない選択肢なんで四苦八苦してたんだけど、
「終了時に最適化する設定がオンになっていると、QuitしてやってもSet = Nothingしてやってもプロセスが残り続ける」ということらしいと数日間無駄にして判明した。
だからdocmd.quitの前に
SetOption "Auto Compact", False
って書いてやって終了時の最適化をオフにしたら解決した。
これの面倒なところはコードとにらめっこしてるだけでは気づけないところ。
access側の設定を見直さないと気づけないので時間を食った。
今時accessを使うとしても、SSMSなりにリンクサーバー飛ばしてaccessにはフォームとレポートだけ持つような設計にするべきだと思う。でも、それができない古いシステムとにらめっこして苦労してる人はきっといるから。
昔Noteに書いたやつの清書版です(パクリじゃないよ)
https://note.com/firedreik/n/n436c8aa7acaf