- ベストアンサー
EXCEL VBA ユーザフォームで複数のコントロールを作るとき
VBAにてシステムを作っています。当該システムの性格上、ユーザフォーム上のコントロールが多量にあります(テキストボックスが30個ぐらい) このように複数のコントロールを作成する場合、オブジェクト名を textbox1,textbox2というように自動で連番を振ってくれるのですが、都合上textboxというオブジェクト名を使えなくなってしまいました。 目的としては txt1,txt2というように任意のオブジェクト名で自動的に連番を振ってほしいのですが、そのような機能はVBEにありますでしょうか?もしくはそういったアドインがあれば教えていただきたいです。いちいち30個もあるコントロールのプロパティをあけて名前を変えるというような非効率的なものは避けたいので・・・。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
実行時に動的に作らないと、実行時にNameプロパティは変更出来ないとヘルプにあるので、アドオンでは出来ないのでは? UserForm に CommandButton をひとつ置いて下記をフォームモジュールにコピペすると txt1~txt3 というTextBoxを作ってくれますが、何だかなぁって感じですね。 Private Sub UserForm_Initialize() Dim cnt As Control, myTxt As Object Dim i As Integer, txtTop As Integer txtTop = 10 For i = 1 To 3 Set cnt = Me.Controls.Add("Forms.TextBox.1", "txt" & i, True) Set myTxt = cnt myTxt.Top = txtTop myTxt.Left = 10 myTxt.Value = Chr(64 + i) txtTop = 10 + txtTop + myTxt.Height Next i End Sub Private Sub CommandButton1_Click() Dim cnt As Control, myTxt As Object For Each cnt In Me.Controls If TypeName(cnt) = "TextBox" Then Set myTxt = cnt MsgBox myTxt.Name & vbCrLf & myTxt.Value End If Next cnt End Sub 私も#1さん同様、なぜ TextBox というオブジェクト名が使えないのかは興味あります。
その他の回答 (1)
- Wendy02
- ベストアンサー率57% (3570/6232)
私は、そのような機能もアドインもわかりませんが、 >txt1,txt2というように任意のオブジェクト名で自動的に連番を振ってほしいのですが、 なぜ、TextBox というオブジェクト名が使えなくなったのか、その根拠に興味を感じます。複数のUserForm(Me) で、その下位のコントロール名が同じ名前があろうとも、使えないというような問題は、発生しないからです。 ただ、私の場合は、数が多くなる時は、後で分かりやすいように、番号や名前を換えます。特に、100番台を使ったりします。その場合、最初は、EXCELまかせて作っておいてから、まとめて、プロパティのオブジェクト名を変更していくようにします。1つのプロパティのオブジェクト名を変更すれば、次のオブジェクトのプロパティも、同じ場所に来るからです。みなさんVBAを書く人たちは、そうしていると思いますけれどね。