2015年1月5日月曜日

プログレスバーを使おう

大昔に、UserFormのラベルにFunctionで計算した数値から導き出した個数の図形を入れて更新し…という方法を覚えた”プログレスバー”。

しかし最近医調べるとどうやら公式コントロールが存在するという話。

White Tiger - ユーザーフォームに進行状況を表示する方法


うん、リンク先見れば一目瞭然ですね。

実際に使うときには、行数を取得するなど、処理の最終値を実際のものにする必要がありますが、何がすごいかって、Excel 97でも使えるというのが驚き。10年もシェイプの描き変え処理と格闘してきたあの日々は一体何だったのかと言うアレです。


それでも、ってんで一つ補足しておきますと、このコントロールを利用する際のキモは「Application.DoEventsメソッド」です。
…正直これもVBAのヘルプ見ればわかるんですけど(笑)、そこから引用すると以下の通り。
「発生したイベントがオペレーティングシステムによって処理されるよう制御を戻します。」
ということで、プログレスバーコントロールの値を再設定する際にDoEventsすることで再描画するわけです。これやらないと、画面が真っ白に固まったような状態が続いた後正常に戻ったときにはもうプログレスバーなんてどこにもなかった!なんてことになります。


あ〜これでやっと延々と行われる処理をいつ終わるかとモニタの前でどら焼き齧りながら待っているような真似をせずとも良いわけです。よかったー。

1 件のコメント:

  1. 実は、DoEventsは使い方を間違えると結構危険らしくて、あちこちに注意喚起記事があります。(例えば→http://blog.jhashimoto.net/entry/20111113/1321133064)これは使い方として非常に単純なのでいいんだけど、他の処理と並行したりする場合は注意が必要かも。知った上でご利用ください。

    返信削除