lena123
Goto Top

TextBox in UserForm dynamisch ansprechen

Hallo!

Ich habe ein UserForm mit 10 TextBoxen mit den Namen: TextBoxA1, TextBoxA2, TextBoxA3, ...

Ich möchte jetzt mit einer Schleife die einzelnen TextBoxen ansprechen, mein Code sieht bis jetzt so aus:


Sub Test()

Dim tb As TextBox
Dim i As Integer

i = 1
Do While i < 11

With tb
.Name = "TextBoxA" & i
End With

Worksheets("Tabelle1").Cells(1, 1).Value = tb.Value

Loop

End Sub


Das funktioniert nur leider so nicht, hat jemand einen Tipp für mich?

Viele Grüße

Content-Key: 71520

Url: https://administrator.de/contentid/71520

Printed on: April 19, 2024 at 20:04 o'clock

Member: vbMaxi
vbMaxi Oct 21, 2007 at 14:51:24 (UTC)
Goto Top
sers lena123,
setzt die Textboxen doch einfach in den Index also dann hast du Textbox(0), Textbox(1) und anstatt 0 und 1 schreibst du einfach i rein.

sieht dann ungefähr so aus:

For i = 0 To 2
   t(i).Text = "hallo"  
Next

lg vbmaxi
Member: lena123
lena123 Oct 21, 2007 at 15:15:13 (UTC)
Goto Top
Hallo vbmaxi,

danke für die Antwort, aber das habe ich schon versucht und die folgenden Möglichkeiten funktionieren leider nicht:

TextBoxA(i).Value
TextBoxA[i].Value
TextBox("A" & i).Value

Mit a = "TextBoxA" & i kann ich den Namen ansprechen aber ich möchte auch den Wert der in das Textfeld eingegeben wurde auslesen.

Vielleicht noch eine andere Idee?

Gruß
lena
Member: vbMaxi
vbMaxi Oct 21, 2007 at 15:41:24 (UTC)
Goto Top
hallo lena123,
wie ich das sehen benutzt du execel oder???
dann funktioniert des auch net weil execel diese index eigenschaft nicht unterstützt!!
sry mein fehler

lg vbmaxi
Member: lena123
lena123 Oct 21, 2007 at 16:30:11 (UTC)
Goto Top
Hallo vbmaxi,

ja stimmt, ich benutze Excel / VBA , habe ich vergessen zu erwähnen, aber trotzdem danke,

lg lena
Member: miniversum
miniversum Oct 21, 2007 at 16:50:00 (UTC)
Goto Top
Versuchs mal so:
    For ti = 1 To 10
        For ci = 0 To UserForm1.Controls.Count - 1
            If UserForm1.Controls.Item(ci).Name = "TextBox" & ti Then  
                MsgBox UserForm1.Controls.Item(ci).Text
            End If
        Next ci
    Next ti

Es werden alle steuerelemente auf der Form durchgesucht und wenn der name "TextBox" & ti (ti=nummer der textbox) lautet ist das das Steuerelement dieser Textbox und er kann verwendet werden (Hier wird der Text der darinsteht angezeigt).

miniversum
Member: lena123
lena123 Oct 21, 2007 at 17:18:11 (UTC)
Goto Top
Dankeschön miniversum,

so funktioniert es einwandfrei!

Gruß, lena
Member: bastla
bastla Oct 21, 2007 at 18:43:34 (UTC)
Goto Top
Hallo lena123!

Als Alternative könntest Du auch ein "control array" (dynamisch) erstellen - das folgende Beispiel basiert auf einer UserForm mit 2 CommandButtons:
Option Explicit
Dim Lb() As Control, Tx() As Control

Private Sub CommandButton1_Click()
Tx(3).BackColor = vbRed
End Sub

Private Sub CommandButton2_Click()
MsgBox Tx(3).Text
End Sub

Private Sub UserForm_Click()
Dim i As Integer
For i = 1 To 4
    Me.Height = i * 20 + 40
    ReDim Preserve Lb(i) As Control, Tx(i) As Control
    Set Lb(i) = Controls.Add("Forms.Label.1", "lbl_" & CInt(i), True)  
    With Lb(i)
        .Top = i * 20 + 2
        .Left = 10
        .Width = 58
        .Height = 12
        .Caption = "Beschriftung " & i & ":"  
    End With
    
    Set Tx(i) = Controls.Add("Forms.TextBox.1", "txt_" & CInt(i), True)  
    With Tx(i)
        .Top = i * 20
        .Left = 70
        .Width = 150
        .Height = 15
        .Text = "leer " & i  
    End With
Next
End Sub

Die dynamischen Steuerelemente werden per Click auf die bereits geladene UserForm erst erzeugt. Die Verwendung der indizierten Controls wird dann anhand der beiden Buttons demonstriert.

Grüße
bastla
Member: lena123
lena123 Oct 22, 2007 at 06:25:10 (UTC)
Goto Top
Hallo Bastla,

werd ich gleich nochmal ausprobieren, danke!

Vg lena