- ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:VB 処理中にプログレス数を表示するには?)
VB処理中にプログレス数を表示する方法とは?
このQ&Aのポイント
- VBでの処理数が多く、また時間もかかる事からプログレスバーを用いて処理を見ているのですが、プログレスバー以外にプログレス数を見たいと思っています。どのようにすれば実現できるか教えてください。
- 現在はテキストボックスのプロパティをいじって処理総数と処理経過数を表示しようとしていますが、全処理が終了した時点でしか表示されません。他の方法はありますか?
- 質問者はVBでの処理中に処理総数と処理経過数を表示したいと考えています。現在はテキストボックスのプロパティをいじって表示しようとしていますが、うまくできません。他に可能な方法はあるでしょうか?
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
> 詳細は省きますが、 最低限の変数宣言は省くべきではないと思いますが。 >Do Until ~ > ~ > Processing = Processing + 1 > TextBox2.Text = Processing TextBox2.Refresh() >Loop かな。 ところで、TextBox2 の再描画に 0.01 秒かかると仮定して > 100万件の処理総数 0.01秒 × 100万 = 1万秒(=2.7時間) 処理時間が長くなるという事です。 実際にはもっと短い時間で再描画できますが、 ループで毎回表示更新するという処理は、 数百(千)回に1回とかに変更することを考えた 方がいいかもしれません。
その他の回答 (2)
- sknbsknb2
- ベストアンサー率38% (1158/3035)
回答No.3
方法としては、 (1)DoEvents()を使う。(ループの1回ごとの実行は無駄なので適当な回数ごとにする) (2)ループの部分をマルチスレッドにして、ループの適当な回数ごとにテキストボックスを書きかえる。 くらいかと。 具体的な方法はネット検索してください。(^_^; ちなみにVB.NETなら(2)も難しくありません。VB6なら選択肢は(1)のみです。
質問者
お礼
1回の処理も長いので、まずはDoEventを試してみます。 ありがとうございました。
- IDii24
- ベストアンサー率24% (1597/6506)
回答No.2
DoEvents などで制御を解放しないと再描画出来ませんよ。つまり真っ白画面のままです。 しかもその分処理が遅くなるので、成るべく更新しない方が良い。だから件数を区切って表示。 その時だけ DoEventsをだす。
質問者
お礼
ありがとうございます。 DoEvents()を調べて試してみます。 更新のタイミングはまとめて行います。ご教示ありがとうございました。
お礼
ありがとうございます。 処理は1分毎のデータを1年ほど回すのですが、 複数年にわたる処理ですので、年毎に出力するようにします。 処理時間の指摘、変数宣言の不足、TextBox2.Refresh()の教示ありがとうございました。