TextBoxen in UserForm fortlaufend ansprechen

Hallo,

Ich möchte in Excel 2003 - VBA in einer UserForm 15 TextBoxen (bzw.Label) mit Werten füllen. Das geht natürlich über:

TextBox1 = Cells(1, 1)

TextBox15 = Cells(1, 15)

Die Variante erscheint mir aber dilletantisch.
Das geht doch sicherlich eleganter über eine For-Next-Schleife oder so.

For i = 1 to 15
TextBox(i) = Cells(1, i)
next
klappt leider nicht.

Ich bekomme das leider nicht hin die TextBoxen laufend anzusprechen.

Danke für Eure Hilfe

Gruß
Arnold

Ich möchte in Excel 2003 - VBA in einer UserForm 15 TextBoxen
(bzw.Label) mit Werten füllen. Das geht natürlich über:

TextBox1 = Cells(1, 1)

TextBox15 = Cells(1, 15)
Die Variante erscheint mir aber dilletantisch.

Hi Arnold,

probiers mal so:

Private Sub UserForm\_Initialize()
Dim T as Byte
For T = 1 To 15
 UserForm1.Controls("Textbox" & T).Value = Cells(1, T)
Next T
End Sub

Gruß
Reinhard

Hallo Arnold,
das geht entweder über ein Steuererlementefeld (Textboxen haben denselben Namen aber unterschiedlichen Index oder aber ein Beispiel wie Du mit „Namensbestandteilen“ basteln kannst:

For i = 0 To Controls.Count - 1
Debug.Print Controls(i).Name
If Left(Controls(i).Name, 4) = „Text“ Then
Controls(i).Text = CStr(i)
End If
Next i

Gruß

Klaus

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hi Klaus,

das geht entweder über ein Steuererlementefeld (Textboxen
haben denselben Namen aber unterschiedlichen Index

nicht in VBA. Das gibt’s nur in VB. :smile:

oder aber
ein Beispiel wie Du mit ‚Namensbestandteilen‘ basteln kannst:

For i = 0 To Controls.Count - 1
Debug.Print Controls(i).Name
If Left(Controls(i).Name, 4) = ‚Text‘ Then
Controls(i).Text = CStr(i)
End If
Next i

Ja, das geht … fast. Control(i) muss nicht zwingend Textbox(i) sein. :smile:

Gruß, Rainer

Hallo,

Ich bin total positiv beeindruckt.
Nach so kurzer Zeit so viele gute Helfer - Toll!

Ich habe dann auch den Code von Reinhard ausprobiert:
klappt super. Genau das was ich gesucht habe.

Vielen Dank nochmal an alle

Arnold

Hola os dos,

das geht entweder über ein Steuererlementefeld (Textboxen
haben denselben Namen aber unterschiedlichen Index

nicht in VBA. Das gibt’s nur in VB. :smile:

wieso das denn? Excel-VBA:

Private Sub UserForm\_Initialize()
Dim i
For i = 0 To Controls.Count - 1
If TypeName(Controls(i)) = "TextBox" Then
 Controls(i).Text = Controls(i).Name & "hat den Index " & i
End If
Next i
End Sub

Was ist da in Vb anderst?

Ja, das geht … fast. Control(i) muss nicht zwingend
Textbox(i) sein. :smile:

Jepp.

Gruß
Reinhard

Hallo Reinhard,

wieso das denn? Excel-VBA:

Private Sub UserForm\_Initialize()
Dim i
For i = 0 To Controls.Count - 1
If TypeName(Controls(i)) = "TextBox" Then
 Controls(i).Text = Controls(i).Name & "hat den Index " & i
End If
Next i
End Sub

Was ist da in Vb anderst?

In Deinem Code schreibst Du …
UserForm1.Controls …

Ob VBA Controls auch ohne ‚Userform‘ nimmt, weißt Du, ich nicht. :smile:

Gruß, Rainer

Hallo Rainer,

jetzt verwirrste mich aber gewaltig,

Dieser Code läuft so in Excel-Vba

wieso das denn? Excel-VBA:

Private Sub UserForm_Initialize()
Dim i
For i = 0 To Controls.Count - 1
If TypeName(Controls(i)) = „TextBox“ Then
Controls(i).Text = Controls(i).Name & "hat den Index " & i
End If
Next i
End Sub

Was ist da in Vb anderst?

In Deinem Code schreibst Du …
UserForm1.Controls …

Ob VBA Controls auch ohne ‚Userform‘ nimmt, weißt Du, ich
nicht. :smile:

und im Code wird ja Controls und nicht Userform1.Controls benutzt. Insofern verstehe ich dich grad nicht:frowning:

Und grundsätzlich, (gilt jetzt nur für mich), ich benutze „Me“ nicht, ist mir zu unklar beim Codelesen wenn er länger ist, „Me“ ist mir nicht eindeutig genug was grad „Me“ ist, das hält beim Lesen auf *find*
With Userform1
ist eindeutig
With Me
für mich nich

Gruß
Reinhard

Hallo Reinhard,

jetzt verwirrste mich aber gewaltig,

Dann verwirre ich Dich noch mehr, ich habe eben zu schnell geantwortet. :smile: Mit ‚Das ist VB, nicht VBA‘ hatte ich gemeint …
das geht entweder über ein Steuererlementefeld (Textboxen haben denselben Namen aber unterschiedlichen Index

In VB6 würde man das so machen:

Dim i As Integer
For i = Text1.LBound To Text1.UBound
 Text1(i).Text = i
Next

Das geht in VBA nicht, weil Steuerelemente keine Eigenschaft ‚Index‘ haben.

Dieser Code läuft so in Excel-Vba

wieso das denn? Excel-VBA:

Private Sub UserForm_Initialize()
Dim i
For i = 0 To Controls.Count - 1
If TypeName(Controls(i)) = „TextBox“ Then
Controls(i).Text = Controls(i).Name & "hat den Index " & i
End If
Next i
End Sub

Was ist da in Vb anderst?

In Deinem Code schreibst Du …
UserForm1.Controls …

Ob VBA Controls auch ohne ‚Userform‘ nimmt, weißt Du, ich
nicht. :smile:

und im Code wird ja Controls und nicht Userform1.Controls
benutzt. Insofern verstehe ich dich grad nicht:frowning:

Ich habe geschrieben, ich weiß nicht, ob VBA Controls einfach so versteht. Ich habe doch kein VBA und kann nichts testen.

Und grundsätzlich, (gilt jetzt nur für mich), ich benutze „Me“
nicht, ist mir zu unklar beim Codelesen wenn er länger ist,
„Me“ ist mir nicht eindeutig genug was grad „Me“ ist, das hält
beim Lesen auf *find*
With Userform1
ist eindeutig
With Me
für mich nich

OK. In VB ist das etwas anderes, so lange ich nur eine Form habe, ist Me immer diese Form. In VBA kann es ja auch das Worksheet sein? In VB gibt es das ja nicht.

Gruß, Rainer

Hallo Rainer,

In VB6 würde man das so machen:

Dim i As Integer
For i = Text1.LBound To Text1.UBound
Text1(i).Text = i
Next

Das geht in VBA nicht, weil Steuerelemente keine Eigenschaft
‚Index‘ haben.

jetzt habe ich es verstanden. Geht so in Excel-Vba nicht, maximal und evtl. wenn man Klassenmodul für eine Textbox anlegt *nichtsicherweiß*

Und grundsätzlich, (gilt jetzt nur für mich), ich benutze „Me“
nicht, ist mir zu unklar beim Codelesen wenn er länger ist,
„Me“ ist mir nicht eindeutig genug was grad „Me“ ist, das hält
beim Lesen auf *find*
With Userform1
ist eindeutig
With Me
für mich nich

OK. In VB ist das etwas anderes, so lange ich nur eine Form
habe, ist Me immer diese Form. In VBA kann es ja auch das
Worksheet sein? In VB gibt es das ja nicht.

Sorry, da ich „Me“ vermeide, auch und grad aus dem Grund daß da in einigen Fällen in irgendeinem Code „Me“ für was anderes stand als ich dachte, und ich erst dann mit dem Code klarkam als ich alle „Me“ durch direkte Referenzierung ersetzte, kann ich leider nicht sagen für was alles „Me“ stehen könnte.

Gruß
Reinhard