Excel VBA IT備忘録

ExcelVBA ProgressBarを自作

投稿日:

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

 

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があったらしいが、最近無くなったそうです。もしかしたら見つけられないだけかも。

スポンサーリンク




スポンサーリンク




-Excel VBA, IT備忘録

執筆者:


comment

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

関連記事

Atomエディタ コメントの色を変更する

Atomのコメントの色を変更する方法です。   Atomのコメントはデフォルトでは灰色で見にくいので変更したほうが無難です。目が疲れます。   調べてみるとやり方は簡単に出てきたの …

Git SourceTreeでファイル名の大文字・小文字を検知

SourceTreeでGitを使っていて、ソースはもちろんのことファイル名を変更したときでも、変更を検知してくれるのだが、ファイル名の小文字を一部大文字にしただけでは検知されなかったので備忘録。 &n …

AS400/IBMi 知ってるコマンドまとめと解説

備忘録です。追記していきますので書きかけです。   コマンドの一覧を表示する SLTCMD SLTCMD CMD(*ALL) これでコマンドの一覧が表示される。 だいたいDSPとかWRKとか …

AS400/IBMi Laravel-Excelで文字化けするので文字コードを変換する

Laravel-Excelというのを見つけたので使ってみたのだが、いかんせんAS400だと色々と面倒くさい。   AS400はEBCDICという文字コードらしく、そこからODBCかPDOで引 …

【WordPress】プラグインでディレクトリを作成できませんでしたと怒られる

ワードプレスをまっさらにして戻ってきたの投稿以来、ちょこちょこ投稿を重ねている。     そこで表でも作りたいなと思ったので、プラグインのTablePressでも入れようかと思った …

Adsense広告


文字で検索

人気記事

なぜだか人気記事

読んでほしい順に