【Access-VBA】ステータスバーに進捗状況等の情報を表示させるには

2015年4月7日

Access でVBAのコードを実行させている時、処理がすぐ終わるのあればいいのですが
テーブルの参照などで時間が掛かる処理を実行させている時には
進捗状況などをどこかに表示させていると何かと便利ですよね。

やり方は色々とありますが
一番簡単な方法は、ステータスバーを利用することです。

例えば、Excel VBA だと以下のようなコードを書いて実行させると

Application.StatusBar = “こんな感じで表示されます。"

ステータスバーに表示してくれます。

これを Access で実現するには、Syscmd メソッドを使います。

SysCmd acSysCmdInitMeter, “表示文字列", 最大値
SysCmd acSysCmdUpdateMeter, 最大値を超えない任意の値
SysCmd acSysCmdClearStatus

となります。表示させるとこんな感じになります。

accessstatusbar0

上から順に説明していくと

  1. Access画面の右下に指定した表示文字列+インジケータを表示してくれます。
  2. 指定された値でインジケータの進捗具合を更新します。
  3. インジケータが不要になったら、消去させます。

進捗状況は、acSysCmdUpdateMeter で指定した値を使って
インジケーターに表示する割合を計算して再表示してくれます。
例えば、最大値が 100 のときに 50 を指定すると、インジケーターが半分まで進みます。
最大値を超えた値を指定するとインジケータが正しく表示されません。
※複数回呼び出し可です。

また、インジケータは、不要で文字列だけ表示させたい場合には
以下のように実行します。

SysCmd acSysCmdSetStatus, “表示文字列"
SysCmd acSysCmdClearStatus

こちらは、Access画面の左下に指定した表示文字列を表示してくれます。
表示させるとこんな感じになります。

accessstatusbar1

指定できる文字数は、いずれも約 80 文字です。
表示する文字がステータスバーよりも長いと、
SysCmd メソッドはステータスバーに収まるように文字を切り捨てます。

どちらの場合でも、表示されている文字列は勝手には消えないので、
処理が終わったら忘れずに消しましょう。
ただ、Excel の時と同じように Access を終了させたら、
消さなくても勝手に消してくれますけどね。

AccessVBA

Posted by 管理人