2022年10月27日木曜日

access vbaでラジオボタン(オプションボタン)を操る。

 入力フォームという名前のフォームにfrmTypeというフレームを追加し、そのフレームに「type1(値1)」と「type2(値2)」というオプションボタンを追加した。
 標準モジュールで、オプションボタンを判定するコードは、以下のような感じだ。

  If [Forms]![入力フォーム]![frmType].Value = 1 then
  [type1の処理]
  else
  [type2の処理]
  End If

2022年10月20日木曜日

access vbaで最適化コマンドは開いていると実行できないので、起動パラメタで制御できるようにしてみた。確実に。

 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のアクションを行うことができる。

2022年10月14日金曜日

accessでパラメタ付きのクエリーをvbaで操作するには、そのパラメタをフォームに変更するしかないのかもしれない。

accessでパラメタ付きのクエリーをvbaで操作するには、そのパラメタをフォームに変更するしかないのかもしれない。
つまり、vbaでパラメタに値を設定するのはできないのかもしれない。パラメタをフォームにすれば、vbaで値を設定するのは、簡単だ。