• ベストアンサー

(;゜д゜)ユーザーフォームでプログレスバーを使いたいが・・・存在していない!!(;゜д゜)

お世話になっております。 プログレスバーについて教えて下さい。 ユーザーフォームを使いそこにプログレスバーが配置できるとネット上で調べたので使おうと思いました。 ところが・・・ツールボックスにプログレスバーがありません(;゜д゜)ァ.... 探してみたのですがどこにも見つかりません。エクセルが壊れているのでしょうか? また、プログレスバーについてどういう風にやったらできるのかというのを見ていたのですがどう動いているのか理解力が無いため理解が出来ません・・・ 下記のようなコードがあり作動している間はバーを動かしたいのですがどうしたらいいでしょうか・・・ Private Sub Worksheet_SelectionChange(ByVal Target As Excel.Range) Dim r As Range For Each r In Target MyProc r Next End Sub Sub MyProc(Target As Range) ・ ・ ・ ・ ・ End Sub

質問者が選んだベストアンサー

  • ベストアンサー
  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.3

回答にある >プログレスバーはEXCELで提供されていたのですね。 は、少し表現について補足したいと思います。 今、私のツールバーでは、プログレスバーのアイコンが出ていますが、過去に下記下記A-2かB-1をやったためと思います。 http://www.asahi-net.or.jp/~ZN3Y-NGI/YNxv9g1810.html のA-2の操作、B-1の操作。 2001,2003で、今まで使ってなければ、出てこないのだと思います(「上記WEBで標準では」という意味)。 マイクロソフトでも他社でも(現実には余りないが)よいが、プログレスバーのコントロールとしてのオブジェクトを提供してくれて、ユーザーが参照設定して(使うという宣言)しまえば、ツールボックスにアイコンが現れるようになります。それをユーザーフォーム上にD&Dすれば(ラベルなどで類似物を自作しないで)使えます。 後はプロパティを設定すればよい。プログラムか操作かどちらかで。 ーー もうひとつの問題は ただし上記WEBにある、処理件数 / 総件数 * 100 に当たるものが、質問者の場合何なのかが難しい問題で、分子・分母に来る計数を 何をどう捉えるかがあります。 ーー さらにもうひとつの問題は 時間が進行し、状況が変化して、表示するタイミングをどう捕まえるかは、そう易しい問題では無いと思うのですが。 ーー 多数のディスク読み込みや、書き込みなどの多件数処理などが時間のほとんどを占めるものは上記WEB上の例のように、考えやすいですが。それでも毎レコード処理するごとに余分な、表示のための処理をしている。 格好よいものですが、難しい点が有ると思う。。

komarimono
質問者

お礼

ありがとうございました! 大変参考になりました!

その他の回答 (2)

  • yyr446
  • ベストアンサー率65% (870/1330)
回答No.2

No.1の回答をみて驚きました。 プログレスバーはEXCELで提供されていたのですね。 私は、わざわざ自分で作っていました。 作り方は、ありがちな方法ですが、 バーの部分を、背景を黒で塗りつぶした長方形のテキストラベル として作っておき、バーのプロパティの幅の値を進捗にあわせて 変化させていく方法です。 見やすいように、枠のテキストラベル (バーより一回り大きく、幅は固定、へこんだ表示、背景なし) にバーを重ね合わせて配置してます。 こんな感じでVBAを作りました。(バーの幅は144です。) Sub test_start() Dim stepw As Single Dim pstep As Integer Dim syori_su As Integer Dim counter As Integer '処理件数のセット syori_su = 10000 '1stepの幅セット stepw = 144 / 100 'メッセージのセット progresform.wakulabel.SpecialEffect = fmSpecialEffectSunken progresform.msglabel.SpecialEffect = fmSpecialEffectRaised progresform.msglabel.Caption = "処理中です。暫くお待ちください。" 'フォームの表示 progresform.Show (vbModeless) '処理ループ For counter = 1 To syori_su pstep = counter / syori_su * 100 Call progres(stepw, pstep) Next counter 'フォームの消去 Unload progresform End Sub Sub progres(stepw As Single, pstep As Integer) progresform.persentlabel.Caption = pstep & "%完了" progresform.barlabel.Width = stepw * pstep progresform.Repaint End Sub

komarimono
質問者

お礼

ありがとうございました! 大変参考になりました!

  • n-jun
  • ベストアンサー率33% (959/2873)
回答No.1

検索すると意外にありますが、その一例です。 プログレスバーコントロールで進捗状況を表示するには? http://www.asahi-net.or.jp/~ZN3Y-NGI/YNxv9g1810.html

komarimono
質問者

お礼

ありがとうございました! 大変参考になりました!

関連するQ&A