入力フォームという名前のフォームに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)ことで最適化が走るようになる仕掛けが完成する。
accessでパラメタ付きのクエリーをvbaで操作するには、そのパラメタをフォームに変更するしかないのかもしれない。
つまり、vbaでパラメタに値を設定するのはできないのかもしれない。パラメタをフォームにすれば、vbaで値を設定するのは、簡単だ。