FOR NEXT ループでIの値を順次表示したいのですが
実行すると1000の表示で終了します。
これを1,2,3.....と表示させるにはどうすれば良いのでしょうか?
N88-BASICなら、なんてことなかったことですが、
VBを始めることになり、いきなりつまずいています。
いきなり登場で恐縮ですが、ご教示ください。
お願いします。
Private Sub Command1_Click()
Dim I As Long
Text1.Text = 0
For I = 1 To 1000
Text1.Text = I
Next
End Sub
強いて書くなら、「Refreshメソッド」を挟んで、このようになりますが……
PCの性能によっては、やはり一瞬の間に終わってしまうと思います。(^_^;)
Option Explicit
Private Sub Command1_Click()
Dim I As Long
Text1.Text = "0"
For I = 1 To 1000
Text1.Text = CStr(I)
Text1.Refresh
Next
End Sub
変化しているのがわかるようにするなら、Timerコントロールを使う事もできます。
Option Explicit
Private Counter As Long
Private Sub Command1_Click()
Timer1.Enabled = True
End Sub
Private Sub Form_Load()
Counter = 0
Timer1.Enabled = False
Timer1.Interval = 55
End Sub
Private Sub Timer1_Timer()
Counter = Counter + 1
Text1.Text = CStr(Counter)
If Counter >= 1000 Then
Timer1.Enabled = False
Counter = 0
End If
End Sub
それって、もしかしてこういうことですか?
Private Sub Command1_Click()
Dim I As Long
Text1.Text = 0
For I = 1 To 1000
Text1.Text = Text1.text & "," & I
Next
End Sub
魔界の仮面弁士さん、Toshihiko ありがとうございます。
魔界の仮面弁士さんのコードを参考にしてやってみたらうまくいきました。
実際にはループの中にGP-IBボードのI/Oを組み込んでいて、刻々と変わるデータを表示させています。
ただ、Option Explicitを宣言すると、実行時にいろいろな変数で、エラーを巻き起こすので、結局 Option ExplicitとText1.Text = CStr(I)を抜いてみました。
Refreshのみで試したところうまくいきました。(いいのだろうか??)
Option ExplicitとText1.Text = CStr(I)のことが気になりますが、
自身でまた調べてみます。
本当にありがとうございました。
とりあえず、解決マーク付けます。
Toshihikoさん。呼び捨てごめんなさい。
> ただ、Option Explicitを宣言すると、実行時にいろいろな変数で、エラーを巻き起こすので、
> 結局 Option ExplicitとText1.Text = CStr(I)を抜いてみました。
それは変数を宣言していないからです。
Option Explicitを使用しないと変数を宣言せずに使用できます。
一見便利に思えますが、スペルミスとか変数のスコープ範囲が分かりにくくなります。
コンパイル時に簡単に発見できる単純なバグが見つけにくいバグになってしまいます。
Option Explicitを宣言し、変数を自分で宣言する癖を付けるべきです。
nanashi さん有り難うございます。
>Option Explicitを宣言し、変数を自分で宣言する癖を付けるべきです。
はい。
確かに変数の宣言が、いい加減になっている感は否めません。
肝に銘じてコードを書くことにします。