• ベストアンサー

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

お世話になっております。 プログレスバーについて教えて下さい。 ユーザーフォームを使いそこにプログレスバーが配置できるとネット上で調べたので使おうと思いました。 ところが・・・ツールボックスにプログレスバーがありません(;゜д゜)ァ.... 探してみたのですがどこにも見つかりません。エクセルが壊れているのでしょうか? また、プログレスバーについてどういう風にやったらできるのかというのを見ていたのですがどう動いているのか理解力が無いため理解が出来ません・・・ 下記のようなコードがあり作動している間はバーを動かしたいのですがどうしたらいいでしょうか・・・ 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/17068)
回答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

  • エクセルvba  (ByVal Target As Range)について

    シートのイベントプロシージャーが Private Sub Worksheet_SelectionChange(ByVal Target As Range) End Sub となりますが (ByVal Target As Range)部分は何なのでしょうか? 何のためにあるのかわかりません。 Private Sub Worksheet_SelectionChange() End Sub としたらエラーが返ってきました。 理由を教えてください。 よろしくお願いします。

  • マクロの疑問

    Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Target.Address <> "A2" Then Range("A2").Select End If End Sub とすると、どのセルを選んでもA2に飛ぶのに、 Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Target.Address = "A3" Then Range("A2").Select End If End Sub とすると、A3を選んでも全く移動しないのはなぜでしょうか。 なにか落とし穴がありそうで。。。 よろしくお願いします。

  • エクセル デバッグできるのとできないのがある

    シートイベントについて教えてください。 シートモジュールに --------------------------------------------------------- Option Explicit Private Sub Worksheet_Activate() MsgBox "" End Sub Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) MsgBox "" End Sub Private Sub Worksheet_Change(ByVal Target As Range) MsgBox "" End Sub Private Sub Worksheet_SelectionChange(ByVal Target As Range) MsgBox "" End Sub --------------------------------------------------------- と記載した時に、 F8で動かせるのは、Worksheet_Activateだけなのですがなぜでしょうか? ほかのイベントは、F8で実行させても、OSの音が鳴るだけで、マクロの実行はされません。 ご回答よろしくお願いします。

  • マクロについて

    マクロ初心者です。 エクセルのマクロで下記は何を示しているのでしょうか。 困っているのでもなんでもないのですが、周りにマクロが判る人がまったく居ないので質問させてもらいます。 Private Sub Worksheet_SelectionChange(ByVal Target As Excel.Range) End Sub

  • エクセルのカーソル移動 横スクロールを最後の入力列まで

    エクセルのカーソル移動について エクセルシートのコードはどこから貼り付け出来るのですか? Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Taget.Column=11 Then ActiveCell.Offset(1,-10).Select End If End Sub

  • VBA マクロの削除について教えてください

    VBEのWorksheet上にある、下記のコードが消えません。 Private Sub Worksheet_SelectionChange(ByVal Target As Range) End Sub 全選択して、Deleteするのですが、消しても復活しています。 これ以上方法が思いつかないので、ご教示をおねがいします。

  • エクセルVBA/イベント発生でコピペ不能はなぜ?

    シートに以下のマクロを設定すると、そのシート内ではコピーしたもののペーストが不能になります。 どうしてでしょうか? Private Sub Worksheet_SelectionChange(ByVal Target As Range) Target.Interior.ColorIndex = 6 End Sub

  • 教えて For Each R In Target

    いつもお世話になっております よろしくお願いします ネットで見つけたマクロなのですが、どなたか解説していただけないでしょうか Private Sub Worksheet_Change(ByVal Target As Range)  Dim R As Range For Each R In Target With R 条件判断と処理 End With Next R End Sub

  • エクセルVBAで Cancel=Trueの使い方

    Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address <> "$A$1" Then Exit Sub Cancel = True MsgBox "キャンセルしました" End Sub Private Sub Worksheet_Deactivate() Cancel = True MsgBox "キャンセルしました" End Sub Private Sub Worksheet_SelectionChange(ByVal Target As Range) Cancel = True MsgBox "キャンセルしました" End Sub 以上のように使ってみましたが、どれも「キャンセルしました」とメッセージは出るものの、直前の操作(入力、シート切替、セル移動)はキャンセルされませんでした。 どこが間違っているのでしょうか?

  • エクセルマクロ(VBA)で指定したセルが変化したときに実行するには?

    VBAでsheetの中のworksheet_changeなどでマクロを書くと、そのシー トの中のどのセルを変化させてもマクロが実行されるのですが、これ を、A1とc1とc2が変化したときだけ処理を実行させたいのです。 以下のマクロのどこかを編集すると、そのようなことが出来るのでし ょうか? Private Sub Worksheet_SelectionChange(ByVal Target As Range) ----実行する内容---- End Sub Private Sub Worksheet_Change(ByVal Target As Range) ----実行する内容---- End Sub