アプリ版:「スタンプのみでお礼する」機能のリリースについて

vb.netでのtimerのようなものをやりたくてvbaでプログレスバーを使用して経過状況を表示するプログラムを作りました。プログレスバー自体での視覚的な経過状況表示はできたのですが、現在のパーセンテージをlabelに表示することができません。

Private Sub CommandButton4_Click()
Dim i As Long
Application.Visible = False
i = 1
For i = i To 1000000
UserForm1.ProgressBar1.Value = i / 1000000*100
UserForm1.Label1.Caption =UserForm1.ProgressBar1.Value
i = i + 1E-44
Next
Application.Visible = True
End Sub

上記のようにするとプログラム終了時にlabel1に現在のプログレスバーの値が表示されますが、進行中には表示されないのです。これを進行中も表示させるにはどうしたら良いのでしょうか?

A 回答 (1件)

こういう場合、UserForm1.RefreshまたはDoEventsを使うと良い。


Refreshは画面(ここではユーザフォーム1)を再描画するもの、DoEventsは現在のスレッド実行中に別のWindowsメッセージを処理させるというものだ。DoEventsを使う場合、画面再描画以外のイベントも処理してしまうので、若干の注意が必要だ。

Private Sub CommandButton4_Click()
Dim i As Long
Application.Visible = False
i = 1
For i = i To 1000000
UserForm1.ProgressBar1.Value = i / 1000000 * 100
UserForm1.Label1.Caption = UserForm1.ProgressBar1.Value
DoEvents
i = i + 1E-44
Next
Application.Visible = True
End Sub

試してないのでうまくいかなかったらごめん。
    • good
    • 0
この回答へのお礼

回答ありがとうございました。
repaintというものを初めて知りうれしいです。今回の環境では処理速度に影響がないのでdoeventsをしようしたいと思います。

お礼日時:2006/09/21 01:00

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