- ベストアンサー
テキストボックスの表示について
いつもお世話になります。VBAで質問があるのですが、ユーザーフォームを作り、コマンドボタンとテキストボックスを配置します。 Private Sub CommandButton1_Click() Dim i As Long For i = 1 To 30 TextBox1.Text = i & "を入力しました" Worksheets("Sheet1").Range("A1").Value = i & "回目です" Next i End Sub と入力して実行すると、セルには1~30回まで順に書き込みがありますが、テキストボックスには最後の「30を入力しました」しか表示されません。 これを「1を入力しました」、「2を入力しました」、「3を・・・」というようにテキストボックスに順に表示させるにはどのようにしたらよいのでしょうか? よろしくお願いします。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
単純に Worksheets("Sheet1").Range("A1").Value = i & "回目です" の下に DoEvents を入れるだけで良いと思います。 それでも速すぎるなら、Timer を使って下記のようにするとか。 Private Sub CommandButton1_Click() Dim i As Long, st, pt pt = 0.01 '1/100秒止める For i = 1 To 30 TextBox1.Text = i & "を入力しました" Worksheets("Sheet1").Range("A1").Value = i & "回目です" st = Timer Do While Timer < st + pt DoEvents Loop Next i End Sub
その他の回答 (3)
- Wendy02
- ベストアンサー率57% (3570/6232)
GetTickCountなど、いろいろ試してみましたが、私の環境ですと、やっぱりSleepに落ち着いてしまいますね。Sleepメモリの占有率が低いのです。 '<モジュールの先頭に置く> Private Declare Sub Sleep Lib "KERNEL32.dll" (ByVal dwMilliseconds As Long) Private Sub CommandButton1_Click() Dim myWaitTime As Long Dim i As Integer myWaitTime = 500 '1/1000 秒 i = 1 '初期値 Do Sleep myWaitTime DoEvents TextBox1.Value = i & " を入力しました。" Worksheets("Sheet1").Range("a1").Value = i & " 回目です。" i = i + 1 Loop Until i > 30 Beep End Sub
お礼
いつもお世話になっておりますm(_ _)m ちょっと難しい方法ですね・・・。参考にさせていただきます!
- ja7awu
- ベストアンサー率62% (292/464)
こんな感じで如何でしょうか。 Private Sub CommandButton1_Click() Dim i As Long For i = 1 To 30 Me.TextBox1.Value = i & "を入力しました" Worksheets("Sheet1").Range("A1").Value = i & "回目です" Me.Repaint Application.Wait (Now + TimeValue("0:00:01")) Next i End Sub
お礼
ありがとうございます。 アプリケーションにウエイトを入れられるのですね。 #3の方のやり方とあまり変わらない速度で実行できました。 参考になりました。
- rio_d
- ベストアンサー率47% (71/149)
おはようございます。 たぶん、ちゃんとテキストボックスには30回表示されていると思います。 ただ、処理が早すぎて目に見えないだけだと思います。 これだとFor~Nextループは一瞬で終わってしまいますよ。 下記をNext iの直前に入れると、1秒ずつ待ってくれます。 newHour = Hour(Now()) newMinute = Minute(Now()) newSecond = Second(Now()) + 1 waitTime = TimeSerial(newHour, newMinute, newSecond) Application.Wait waitTime
お礼
お返事ありがとうございます。 私のPCはPenIIIの1GHzなので一瞬で終わらず30を繰り返すだけでも1秒以上かかってしまいます。 実際はFor~Nextの中身はもっと複雑な処理をしているのですが、Textに改行を入れて表示させると やはり処理の最後にズラっと 1を入力しました 2を入力しました ・・・ 30を入力しました と表示されてしまいます。
お礼
ありがとうございます!DoEventsを入れるだけでTextBoxにも毎回表示されるようになりました! 私のPCは遅いのでこれで十分です。 助かりました~。