プロが教えるわが家の防犯対策術!

お世話になっております。
プログレスバーについて教えて下さい。
ユーザーフォームを使いそこにプログレスバーが配置できるとネット上で調べたので使おうと思いました。
ところが・・・ツールボックスにプログレスバーがありません(;゜д゜)ァ....
探してみたのですがどこにも見つかりません。エクセルが壊れているのでしょうか?

また、プログレスバーについてどういう風にやったらできるのかというのを見ていたのですがどう動いているのか理解力が無いため理解が出来ません・・・
下記のようなコードがあり作動している間はバーを動かしたいのですがどうしたらいいでしょうか・・・

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

A 回答 (3件)

回答にある


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

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

お礼日時:2009/02/08 00:01

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
    • good
    • 0
この回答へのお礼

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

お礼日時:2009/02/08 00:02

検索すると意外にありますが、その一例です。



プログレスバーコントロールで進捗状況を表示するには?
http://www.asahi-net.or.jp/~ZN3Y-NGI/YNxv9g1810. …
    • good
    • 0
この回答へのお礼

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

お礼日時:2009/02/08 00:02

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!