3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

ExcelVBAからaccessVBAを起動したときにDocmd.quitしてもquitしてくれない問題

Posted at

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

3
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?