Dynamisches Erstellen von VBA-TextBoxen mit Change-Event
Schritt-für-Schritt-Anleitung
Um TextBoxen in einer Userform dynamisch zu erstellen und das Change-Event zu integrieren, befolge diese Schritte:
-
Userform vorbereiten: Öffne die Userform, in der du die TextBoxen erstellen möchtest.
-
VBA-Editor öffnen: Drücke ALT + F11
, um den VBA-Editor zu öffnen.
-
Code in die Userform einfügen: Füge den folgenden VBA-Code in das Code-Fenster deiner Userform ein:
For i = 1 To intLS
' Textbox erstellen
Set objTextBox = Me.Frame1.Controls.Add("Forms.Textbox.1", , True)
With objTextBox
.Name = "Textbox" & i
.Top = (i - 6) * 20
.Left = 405
.Height = 15
.Width = 100
End With
' Change-Event hinzufügen
Dim VBC As Object
Dim LineNr As Integer
With ThisWorkbook.VBProject.VBComponents(UserForm1.Frame1.objTextBox).CodeModule
LineNr = .CreateEventProc("Change", "Textbox" & i)
.InsertLines LineNr + 1, "Me.Textbox" & i & ".Value = """""
.InsertLines LineNr + 2, "Me.Textbox" & i & ".SetFocus"
End With
Next i
-
Code anpassen: Stelle sicher, dass die Variable intLS
die Anzahl der TextBoxen festlegt, die du erstellen möchtest.
Häufige Fehler und Lösungen
-
Fehler 438: „Objekt unterstützt diese Eigenschaft nicht“: Dieser Fehler tritt häufig auf, wenn du versuchst, ein Event für ein Objekt zu erstellen, das es nicht unterstützt. Stelle sicher, dass du die richtige Referenz für das TextBox-Objekt verwendest.
-
TextBox erscheint nicht: Überprüfe, ob die TextBoxen in einem Container (z. B. Frame) erstellt werden. Stelle sicher, dass der Container sichtbar ist.
Alternative Methoden
Falls das dynamische Erstellen von TextBoxen über Code nicht funktioniert, kannst du auch Klassenmodul verwenden. Hier ist eine kurze Anleitung:
-
Klassenmodul erstellen: Erstelle ein neues Klassenmodul (z. B. clsTextBox
).
-
Code für die Klasse:
Option Explicit
Public WithEvents objTextBox As MSForms.TextBox
Private Sub objTextBox_Change()
Me.TextBox2.Value = ""
Me.TextBox2.SetFocus
End Sub
-
Instanziierung in der Userform:
Dim oMeineTextBox As clsTextBox
Set oMeineTextBox = New clsTextBox
Set oMeineTextBox.objTextBox = Me.Frame1.Controls.Add("Forms.Textbox.1", , True)
Praktische Beispiele
Hier ist ein einfaches Beispiel für die Implementierung des Change vba
-Events:
Private Sub UserForm_Initialize()
Dim i As Integer
For i = 1 To 5
Dim newTextBox As MSForms.TextBox
Set newTextBox = Me.Controls.Add("Forms.TextBox.1", "textbox" & i)
newTextBox.Top = i * 20
newTextBox.Left = 10
newTextBox.Width = 100
Next i
End Sub
In diesem Beispiel werden fünf TextBoxen erstellt. Du kannst das textbox change event vba
hinzufügen, indem du die oben genannten Schritte befolgst.
Tipps für Profis
- Verwendung von
WithEvents
: Nutze WithEvents
, um auf Events der dynamisch erstellten TextBoxen zuzugreifen.
- Fehlerprotokollierung: Implementiere eine Fehlerprotokollierung, um Probleme bei der Erstellung von TextBoxen zu identifizieren.
- Modularität: Teile deinen Code in separate Subroutinen oder Funktionen auf, um die Lesbarkeit und Wartbarkeit zu erhöhen.
FAQ: Häufige Fragen
1. Kann ich TextBoxen auch für andere Events verwenden?
Ja, du kannst auch andere Events wie Click
oder KeyPress
für die TextBoxen verwenden. Das Vorgehen ist ähnlich wie beim Change
-Event.
2. Funktioniert dies in allen Excel-Versionen?
Die beschriebenen Methoden funktionieren in Excel-Versionen, die VBA unterstützen, wie Excel 2010 und neuer.
3. Was ist der Unterschied zwischen Forms.TextBox
und ActiveX TextBox
?
Forms.TextBox
ist ein einfaches Steuerelement, das in UserForms verwendet wird, während ActiveX TextBox
mehr Funktionen bietet und direkt in Excel-Arbeitsblätter eingezogen werden kann.