入力フォームという名前のフォームにfrmTypeというフレームを追加し、そのフレームに「type1(値1)」と「type2(値2)」というオプションボタンを追加した。 標準モジュールで、オプションボタンを判定するコードは、以下のような感じだ。
If [Forms]![入力フォーム]![frmType].Value = 1 then [type1の処理] else [type2の処理] End If
入力フォームという名前のフォームにfrmTypeというフレームを追加し、そのフレームに「type1(値1)」と「type2(値2)」というオプションボタンを追加した。 標準モジュールで、オプションボタンを判定するコードは、以下のような感じだ。
If [Forms]![入力フォーム]![frmType].Value = 1 then [type1の処理] else [type2の処理] End If
access vbaでは、最適化コマンドはdbを開いていると実行できない。 SendKeys "%(YC)"またはSendKeys "%(Y){TAB}{Enter}"で動かせるようだが、SendKeysはキー送信のため、不安定であり、うまく動かないことがある。 確実に最適化を動かすために、起動パラメタを使うのがいい。是非、マネしてください。 起動パラメタは、c:¥Users¥username¥Documents¥abc.accdb /cmd "actParam1"というコマンドラインを叩くと、起動時にactParam1というパラメタをvbaで受け取ることができる。 一方、accessの設定で、閉じると自動的に最適化を行うようにしておく。 以下のモジュールをvbaで書いて、AutoExecという名前のマクロを作成し、AutoStartProcプロシジャを開くように登録しておく。 AutoStartProcの中身は、こんな感じだ。
Public Function AutoStartProc() If InStr(Command,"actParam1")>0 then Application.Quit ’オプションの□ 閉じると最適化するにチェックを入れておく。この結果、最適化が走る。 ElseIf InStr(Command,"actParam2")>0 then [最適化後にやりたい処理] Docmd.XXXXX Docmd.YYYYY Aoplication.Quit End If End Functionこれで、actParam1という起動パラメタの場合、accessを閉じる(Application.quit)ことで最適化が走るようになる仕掛けが完成する。 そして、start /wait c:¥Users¥username¥Documents¥abc.accdb /cmd "actParam1"で起動すれば、最適化が動く。なお、/waitにより、必ずコマンドの完了を待つことができる。そして、これ(/wait)がとても大切になる。また、不要なオブジェクト、つまり、2GB超えの要因となりそうなテーブルを再作成するケースであれば、再作成の前にこのタイミングで、いったん全てのオブジェクトを一旦、削除して、最適化を走らせておくのがよろしいだろう。 また、start /wait c:¥Users¥username¥Documents¥abc.accdb /cmd "actParam2"で起動すれば、actParam2のアクションを行うことができる。
accessでパラメタ付きのクエリーをvbaで操作するには、そのパラメタをフォームに変更するしかないのかもしれない。 つまり、vbaでパラメタに値を設定するのはできないのかもしれない。パラメタをフォームにすれば、vbaで値を設定するのは、簡単だ。