Häufig gibt es in UserForms mehrere Textboxen, deren Inhalte in ein Tabellenblatt übertragen werden sollen. Das kann man mit einer Schleife sehr elegant lösen.
Option Explicit
Private Sub CommandButton1_Click()
Dim obj As Object
Dim ziel As Long
Dim arr(10) As Variant
Dim az As Integer
ziel = Range("A65536").End(xlUp).Row
For Each obj In Me.Controls
If Left(TypeName(obj), 7) = "TextBox" Then
arr(az) = obj.Value
az = az + 1
End If
Next obj
Worksheets("Datenbank").Range("A" & ziel, "J" & ziel) = arr
End Sub
|
Im Beispielmakro werden die Inhalte von zehn Textboxen in ein Array übertragen und dann in die nächste freie Zeile der Tabelle geschrieben.
Wenn man die Möglichkeit genutzt hat, den Textboxen andere Namen zu geben, muss der Quelltext ein wenig verändert werden:
Option Explicit
Private Sub CommandButton3_Click()
Dim obj As Object
Dim ziel As Double
Dim arr(10) As Variant
Dim az As Integer
ziel = Range("A65536").End(xlUp).Row
For Each obj In Me.Controls
If Left(obj.Name, 4) = "tebo" Then
arr(az) = obj.Value
az = az + 1
End If
Next obj
Worksheets("Datenbank").Range("A" & ziel, "J" & ziel) = arr
End Sub
Alle Quelltexte eingefügt mit: Excel Code Jeanie |
Die Änderung befindet sich in dieser Zeile:
If Left(obj.Name, 4) = "tebo" Then
Es wird nicht mehr der Typname des Objekts, sondern der vom Anwender vergebene Name referenziert. Das ist
zum Beispiel nützlich, wenn man verschiedene Eingabebereiche in einem Formular verwenden möchte.
Dann kann man über unterschiedliche Namen die gewünschten Objekte ansprechen. Der vollständigkeit
halber sei erwähnt, dass diese Methode nur funktioniert, wenn die Objekte einer Gruppe den gleichen
Grundnamen haben. Die Unterscheidung darf nur durch einen Anhang, wie zum Beispiel eine fortlaufende Ziffer
erfolgen. Im vorliegenden Beispiel tebo1, tebo2 usw.