VBA 画面の描画を停止する・ステータスバーへのメッセージ表示 [VBA]
VBAで処理を行っている間、処理の内容によっては、その影響が画面に反映する場合があります。
VBAでやっていることを、画面上で見せたくない場合は、Application.Echoで画面の描画(書き換え)を停止することができます。
・構文
Application.Echo EchoOn, bstrStatusBarText
・EchoOn … 必須です。Trueなら描画ON、Falseなら描画OFFになります。
・bstrStatusBarText … ステータスバーテキストに表示する文字列を指定します。
以下に、例を示します。
Private Sub cmdEcho_Click() Application.Echo False, "処理中…" ' '…処理… ' Application.Echo True End Sub
フォームに配置したコマンドボタンで処理を起動すると想定して、その処理の前後で描画をOFF、ONしています。
第2パラメタのステータスバーテキストを指定すると、任意の文字列をACCESSの画面の下部分に表示させる事ができます。
描画OFFにした後、描画ONにしないと、VBAの処理が終わった後も画面が描画されないままになってしまいます。
ACCESSは操作を受け付ける状態になっているのですが、画面が更新されないので、実質操作不能な状態になってしまいます。
他のウィンドウが上に重なったりしても、ACCESSの描画が停止しているので、おかしな表示になったりします。
この場合、Alt+F11でVBA Editorを表示させ、イミディエイトウィンドウからApplication.Echo trueを実行することで、描画ONにすることが可能です。
プログラム中で描画OFFを使用する場合は、かならず最後にONに戻すようにして下さい。
エラー処理を行っている場合は、その辺も考慮が必要です。
私の場合、あまり描画OFFはしていません。
実際に処理を行ってみて、見苦しい場合はOFFにします。
OFFにしなければならないようなケースは、実際少ないのではと思います。
処理に時間がかかる場合は、ステータスバーテキストへのメッセージ表示を使用します。
プログレスバーのような、ビジュアル的な表示はできないのですが、「処理中…」や、「123件処理中…」などと表示しておくと、処理過程や、異常で停止していないか分かって便利です。
DoCmdにも、同じ機能の DoCmd.Echoメソッドがあります。まったく同じ機能です。
DoCmdは、たぶん内部でApplicationのメソッドを呼んでいるだけだと思うので、Applicationが推奨です。
コメント 0