IT関連

ExcelVBA ProgressBarを自作

投稿日:2019年4月22日 更新日:

これは自分の備忘録であり、私が思い出すための記事なのでご了承のほど。

 

5分くらい時間がかかるマクロがあり、固まっていないか心配になると上司から指摘があり、進捗バーを作ろうとする。

 

VBAのプログラム実行中はカーソルがサークル形になり、グルグル回っているが、グルグル回ったまま止まっているのかもしれないし、確かに不安かもしれない。

 

とりあえずユーザーフォームで作って見る。こんな感じ。

 

部品は、

  • 実行中です・・しばらくお待ちください」のラベル
  • 正方形のラベルにborderを付けたものを10個

これだけ。border付ラベルのオブジェクト名はLabel1~Label10にしておく。

このLabel1~Label10の背景色を進捗の過程で1つ1つ変えていく。原理はそれだけです。

ユーザーフォームの名前はUserForm1にしておく。

 

メインロジックはこんな感じ。このソースそのままでは動きません。下で解説してるのでご参考までに。

 

  1. 今回やりたいのは表示をさせた裏でプログラムを走らせることだが、引数に0を指定してモードレスにしておかなければ、処理が先に進まない。
  2. これはユーザービリティの話だと思うけど、最初に青くさせた方が安心感があると思って、とりあえず初っ端Label1を青くしている。
  3. DoEventsをしないと2の変更が画面上変わらないので、これをしておく。画面更新の意味ですね。
  4. これは今回必ずしも必要ないけど、長時間のマクロには画面遷移は不要。オフっておくことでだいぶ速度が速くなる。
  5. ここが実際の処理にあたる。今回は仮なので適当。
  6. ProgressBarの数を10個にしているとBreakPointが9個無いと全部青くならないので、最後にすべて青くする処理を施す。
  7. 画面遷移を元に戻しておく。
  8. プログラム終了前にユーザーフォームを閉じる。

 

これがブレークポイントで呼び出すサブルーチンのコード。

 

  1. このコードは別から呼び出されるのでパブリック変数として次に青くするラベルの数を保存しておく
  2. ブレークポイントがLabel10を超えてしまうかもしれないので一応エラーを無視しておく
  3. Progress_cntは0からスタートする。メインでLabel1を青くしたから、+2をしてLabel2からスタート。
  4. UserForm1.Controls(引数)でLabel1~10を指定できる。これで青くする。
  5. カウンターを足しこむ

 

最後にすべてのラベルを青くするコード

 

  1. スリープを使えるようにする。プログラムの処理は一瞬なので少し間をあけてラベルの色を変えないと視認できない。
  2. 1秒だと長いので0.5ミリ秒にする
  3. Labalは10個あるので、現在のカウントから10まで回す。
  4. スリープをする。ただし⑤の処理でSleep_Timeが̠̠マイナスになっても大丈夫なように1以上のときに実行する
  5. 毎回0.5秒ずつ増えていくと単調なので、徐々に減らして加速する。

 

こんな感じ。変に固まってUserFormが後ろに隠れてしまうことがたまにあるので、万能ではないかもしれない。

ただユーザを不安にさせない時間稼ぎくらいにはなるだろう。

あとVBAのコントロールにはProgressBarがあったらしいが、最近無くなったそうです。もしかしたら見つけられないだけかも。

スポンサーリンク




スポンサーリンク




-IT関連
-,

執筆者:


comment

Your email address will not be published. Required fields are marked *

関連記事

AS400/IBMi 8桁の日付を6桁で比較する

すみません、これは自分の備忘録です。 ゴミなので無視してください。   DDS 入出力 STR(6桁)   C仕様書 初期値にZ-ADD 20000000 STRWRK 80 これ …

PHP 設定関連

php.ini ERROR_REPORTING デフォルトのエラー表示が過剰なのでいつも変更している。 デフォルトは、error_reporting=E_ALL & ~E_DEPRECATED …

Windows コマンドプロンプト 備忘録

書きかけです。   コマンドプロンプトの起動 「Win」+「R」にcmdと入力してエンター   コマンドプロンプトの終了(exit) C:\Users\User> exit …

Git プッシュしたのに効かない件

ブログなので皆さまのお役にたてば幸いですが、あくまで自分の忘備録なので、昔話も含めて書いております。ご了承ください。 環境は、 開発環境は自席PC(ローカル) Windows10PC XAMPP7.2 …

Windows10Pro Docker起動できない 仮想化を有効化にする

DockerをWindows10ProのPCにインストールしたのだけど、なぜか起動しなかったので備忘録。   エラーメッセージは An error occurred Hardware ass …

Adsense広告




文字で検索

人気記事

なぜだか人気記事

読んでほしい順に