下記のコードを実行してみます。
Private Sub Command1_Click()
ProgressBar1.Visible = True
Label1.Visible = True
ProgressBar1.Max = Val(Text1.Text)
For i = 1 To Val(Text1.Text)
Text1.Text = i
ProgressBar1.Value = i
Next i
MsgBox "終了しました。"
ProgressBar1.Visible = False
Label1.Visible = False
End Sub
「ProgressBar1」はループに入る前に「Visible = True」になります。
「Label1」はループ終了後に「Visible = True」になります。
「Text1.Text = i」はループ終了後に表示されます。
本来は、「Label1」はループに入る前に「Visible = True」にして、「Text1.Text = i」をループ中に表示させたいのですが、できません。
どこかコードが間違っているのでしょうか。
No.2
- 回答日時:
Windowsのプログラムというのは、OSからイベントで駆動され、プログラムでの処理が終わってからOSに制御を返します。
そのため、基本的にはひとつのイベント内で、他のイベントが発生するような処理は思うように行かないことがあるのです。
(ここでは詳しくは説明しきれませんが...)
ykkw_2001さんのおっしゃる「DoEvent」ステートメントは、このひとつのイベント内での連続処理中に、一度、プログラムが制御を手放してWindowsに処理をするタイミングを与えるための命令です。
お試しください。
>他のイベントが発生するような処理は思うように行かないことがあるのです。
...どうも、そのようですね。
しかしながら、
「ProgressBar1」がループ前に「Visible = True」
「Label1」がループ終了後に「Visible = Truue」
同じループに入る前なのに・・・・って思ってしまうのは素人考えでしょうか。
昔のBASICは必ず行の上から実行されていたので、なんとなく不思議でした。
これが、VBのバグなのか、WinOS自体の仕様なのかとの疑問もありましたが「DoEvents」が用意されているということは、WinOS自体の仕様なのでしょうね。
よくわかりました。 有り難うございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- JavaScript フォームが空欄の時にフォームの外をクリックすると、エラーが出るコードを調べています。 1 2023/06/25 11:51
- Excel(エクセル) 2つのVBAを一緒にしたら機能しなくなりました(エクセル) 7 2022/06/02 12:41
- Visual Basic(VBA) Worksheets メソッドは失敗しました。のエラー処理のやり方 4 2022/05/29 21:29
- Visual Basic(VBA) VBA 重複チェック後に値をワークシートに転記する方法を教えてください。 1 2023/03/19 12:43
- Visual Basic(VBA) EXCELのセル相互同期用のVBAでの不具合 3 2022/08/10 11:44
- Visual Basic(VBA) ExcelのVBAコードについて教えてください。 6 2022/06/08 12:55
- Visual Basic(VBA) [Excel VBA] このコードでは行の挿入や行の消去をすると13のエラーが出てしまう。 3 2022/12/09 00:29
- Excel(エクセル) VBA 同日で2回目(午後)の体温を登録するときのコード 3 2022/08/28 20:29
- Visual Basic(VBA) 動きっぱなしです。止め方とプロシージャの間違いを教えて下さい! 5 2022/08/15 23:08
- Visual Basic(VBA) ExcelのVBAコードについて教えてください。 1 2023/02/02 09:25
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
プログラミングについて。 1つ...
-
画面を強制的に再描画させる方法
-
DoEventsが必要な理由について
-
エクセルの当番表を作っていま...
-
VBAで3秒だけ時間を止めたい
-
ループ内での条件処理
-
DOSコマンドのループ内のTIMEコ...
-
アクティブセルから、A列最終行...
-
VBA Dir関数でファイルをループ...
-
VBA for i=1 to lastrow
-
UWSCの終了の仕方
-
GIFアニメをループさせたくない
-
while(*s++=*t++)の判定は?
-
範囲指定したセルを1つずつ飛...
-
どなたかこのプログラミングを...
-
Javascriptでalertを大量のルー...
-
テキストボックスの名前に変数...
-
vbscriptでIE自動入力(途中で...
-
乱数の桁数指定、または範囲指定。
-
Java 南京錠
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
画面を強制的に再描画させる方法
-
VBAで3秒だけ時間を止めたい
-
VBAでの一時停止と再開の方法
-
どなたかこのプログラミングを...
-
Escキーを押すと、中断する時と...
-
UWSCの終了の仕方
-
エクセルの当番表を作っていま...
-
VBA for i=1 to lastrow
-
「偶数・奇数の和」のフローチ...
-
アクティブセルから、A列最終行...
-
DoEventsが必要な理由について
-
vb.netからエクセル関数書き込み
-
GIFアニメをループさせたくない
-
DOSコマンドのループ内のTIMEコ...
-
範囲指定したセルを1つずつ飛...
-
流れ図(フローチャート)が分か...
-
乱数の桁数指定、または範囲指定。
-
テキストボックスの名前に変数...
-
CSVファイルの特定の行だけを読...
-
vb.netです。2次元配列の要素を...
おすすめ情報