はじめまして。かなりの初心者です。
text1.text=1・・・text20.text=20
といったデータがあって、クリックしたら、textの中身を1ずつ増やす、みたいな事をやりたいのですが、for文で自動的に出来ませんか?
text”1”.text←この1は数値じゃないからfor文だとだめですよねぇ。。
よろしくお願いします。。
すいません。。ほんと初心者で。。
フォームのControls プロパティにコントロール名を編集して指定すれば
良いと思います。
例えば、こんな感じとか・・・
Private Sub Command2_Click()
Dim l As Long
For l = 1 To 20
With Me.Controls("Text" & CStr(l))
.Text = CStr(Val(.Text) + 1)
End With
Next
End Sub
こんな感じでも良いかな?
Private Sub Command1_Click()
Dim oCtrl As Control
For Each oCtrl In Me.Controls
If TypeOf oCtrl Is TextBox Then
oCtrl.Text = CStr(Val(oCtrl.Text) + 1)
End If
Next
End Sub
本来なら、
Text1(0)〜Text1(19)
というふうにコントロール配列にしておくと
For i = 0 To 19
Text1(i).Text = CStr(Clng(Text1(i).Text) + 1 )
Next
と出来て楽なのですが、
いまさら名前変えるのヤダというのなら、
オブジェクト配列にコントロールをSetする手もあります。
モジュールレベルで
Private mobjText(19) As TextBox
とやっておいて、Form_Loadで
Me.Show
Set mobjText(0) = Text1
Set mobjText(1) = Text2
.....
Set mobjText(19) = Text20
(20行書くのがいやなら、For文使って
Set mobjText(i) = Me.Controls("Text" & CStr(i + 1))
でもよい。)
としておけば、
For i = 0 To 19
mobjText(i).Text = CStr(Clng(mobjText(i).Text) + 1 )
Next
のように、普通にFor文でカウントアップできます。
ツイート | ![]() |