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-ID: 71520

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

Ausgedruckt am: 22.11.2024 um 15:11 Uhr

vbMaxi
vbMaxi 21.10.2007 um 16:51:24 Uhr
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
lena123
lena123 21.10.2007 um 17:15:13 Uhr
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
vbMaxi
vbMaxi 21.10.2007 um 17:41:24 Uhr
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
lena123
lena123 21.10.2007 um 18:30:11 Uhr
Goto Top
Hallo vbmaxi,

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

lg lena
miniversum
miniversum 21.10.2007 um 18:50:00 Uhr
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
lena123
lena123 21.10.2007 um 19:18:11 Uhr
Goto Top
Dankeschön miniversum,

so funktioniert es einwandfrei!

Gruß, lena
bastla
bastla 21.10.2007 um 20:43:34 Uhr
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
lena123
lena123 22.10.2007 um 08:25:10 Uhr
Goto Top
Hallo Bastla,

werd ich gleich nochmal ausprobieren, danke!

Vg lena