連続するテキストボックスの中身をかきかえるには?


ゆう  2002-07-17 12:29:04  No: 104530

はじめまして。かなりの初心者です。
text1.text=1・・・text20.text=20  
といったデータがあって、クリックしたら、textの中身を1ずつ増やす、みたいな事をやりたいのですが、for文で自動的に出来ませんか?
text”1”.text←この1は数値じゃないからfor文だとだめですよねぇ。。
よろしくお願いします。。
すいません。。ほんと初心者で。。


あき☆彡  2002-07-17 15:55:51  No: 104531

フォームの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


Say  2002-07-17 18:38:58  No: 104532

本来なら、

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文でカウントアップできます。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加