User Forms professionell gestalten: Der komplette Guide
Lesezeit: 11 Minuten | Kategorie: VBA-Programmierung
VBA UserForms sind grafische Benutzeroberflächen für Excel-Makros. Statt kryptischer Eingabeaufforderungen erstellen Sie professionelle Formulare mit Buttons, Dropdown-Menüs und Validierung. Dieser Guide zeigt alles von Grundlagen bis zu Multi-Page-Formularen.
UserForm erstellen und designen
Schritt 1: UserForm einfügen
- VBA-Editor (Alt + F11)
- Einfügen → UserForm
- Leeres Formular erscheint + Werkzeugkasten
Schritt 2: Controls hinzufügen
Aus der Toolbox ziehen:
- Label: Text/Beschriftung
- TextBox: Eingabefeld
- ComboBox: Dropdown-Menü
- ListBox: Auswahlliste
- CommandButton: Button (OK, Abbrechen)
- CheckBox: Ja/Nein-Option
- OptionButton: Exklusive Auswahl
Controls: TextBox, ComboBox, ListBox
TextBox (Eingabefeld)
Private Sub cmdOK_Click()
Dim name As String
name = txtName.Value
MsgBox "Hallo " & name
End Sub
Dim name As String
name = txtName.Value
MsgBox "Hallo " & name
End Sub
ComboBox (Dropdown)
Private Sub UserForm_Initialize()
' ComboBox füllen
cboRegion.AddItem "Nord"
cboRegion.AddItem "Süd"
cboRegion.AddItem "Ost"
cboRegion.AddItem "West"
End Sub
' ComboBox füllen
cboRegion.AddItem "Nord"
cboRegion.AddItem "Süd"
cboRegion.AddItem "Ost"
cboRegion.AddItem "West"
End Sub
ListBox (Mehrfachauswahl)
lstProdukte.MultiSelect = fmMultiSelectMulti
' Ausgewählte Elemente auslesen:
Dim i As Long
For i = 0 To lstProdukte.ListCount - 1
If lstProdukte.Selected(i) Then
Debug.Print lstProdukte.List(i)
End If
Next i
' Ausgewählte Elemente auslesen:
Dim i As Long
For i = 0 To lstProdukte.ListCount - 1
If lstProdukte.Selected(i) Then
Debug.Print lstProdukte.List(i)
End If
Next i
Validierung und Fehlerbehandlung
Private Sub cmdSpeichern_Click()
' Validierung
If Len(txtName.Value) = 0 Then
MsgBox "Bitte Namen eingeben!", vbExclamation
txtName.SetFocus
Exit Sub
End If
If Not IsNumeric(txtAlter.Value) Then
MsgBox "Alter muss eine Zahl sein!", vbExclamation
Exit Sub
End If
' Daten speichern
Dim nextRow As Long
nextRow = Cells(Rows.Count, 1).End(xlUp).Row + 1
Cells(nextRow, 1).Value = txtName.Value
Cells(nextRow, 2).Value = txtAlter.Value
Unload Me
End Sub
' Validierung
If Len(txtName.Value) = 0 Then
MsgBox "Bitte Namen eingeben!", vbExclamation
txtName.SetFocus
Exit Sub
End If
If Not IsNumeric(txtAlter.Value) Then
MsgBox "Alter muss eine Zahl sein!", vbExclamation
Exit Sub
End If
' Daten speichern
Dim nextRow As Long
nextRow = Cells(Rows.Count, 1).End(xlUp).Row + 1
Cells(nextRow, 1).Value = txtName.Value
Cells(nextRow, 2).Value = txtAlter.Value
Unload Me
End Sub
Dynamische ComboBoxen
ComboBox aus Excel-Range füllen:
Private Sub UserForm_Initialize()
Dim rng As Range
Set rng = Worksheets("Stammdaten").Range("A2:A100")
Dim cell As Range
For Each cell In rng
If cell.Value <> "" Then
cboKunde.AddItem cell.Value
End If
Next cell
End Sub
Dim rng As Range
Set rng = Worksheets("Stammdaten").Range("A2:A100")
Dim cell As Range
For Each cell In rng
If cell.Value <> "" Then
cboKunde.AddItem cell.Value
End If
Next cell
End Sub
Multi-Page Formulare
Für komplexe Formulare nutzen Sie MultiPage Control:
- MultiPage aus Toolbox einfügen
- Rechtsklick → "Neue Seite" für zusätzliche Tabs
- Pro Seite unterschiedliche Controls
Private Sub cmdWeiter_Click()
' Zur nächsten Seite
If MultiPage1.Value < 2 Then
MultiPage1.Value = MultiPage1.Value + 1
End If
End Sub
' Zur nächsten Seite
If MultiPage1.Value < 2 Then
MultiPage1.Value = MultiPage1.Value + 1
End If
End Sub
Daten in Excel schreiben
Private Sub cmdSpeichern_Click()
Dim ws As Worksheet
Set ws = Worksheets("Daten")
Dim nextRow As Long
nextRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row + 1
ws.Cells(nextRow, 1).Value = txtName.Value
ws.Cells(nextRow, 2).Value = cboRegion.Value
ws.Cells(nextRow, 3).Value = txtBetrag.Value
ws.Cells(nextRow, 4).Value = Date
MsgBox "Gespeichert!", vbInformation
Unload Me
End Sub
Dim ws As Worksheet
Set ws = Worksheets("Daten")
Dim nextRow As Long
nextRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row + 1
ws.Cells(nextRow, 1).Value = txtName.Value
ws.Cells(nextRow, 2).Value = cboRegion.Value
ws.Cells(nextRow, 3).Value = txtBetrag.Value
ws.Cells(nextRow, 4).Value = Date
MsgBox "Gespeichert!", vbInformation
Unload Me
End Sub
Formular mit Klasse verbinden
Für professionelle Architektur: Klasse für Geschäftslogik, UserForm nur für UI.
' Klassenmodul: clsKunde
Public Name As String
Public Region As String
Public Function Speichern() As Boolean
' Geschäftslogik hier
Speichern = True
End Function
' In UserForm:
Private Sub cmdOK_Click()
Dim kunde As New clsKunde
kunde.Name = txtName.Value
kunde.Region = cboRegion.Value
kunde.Speichern
End Sub
Public Name As String
Public Region As String
Public Function Speichern() As Boolean
' Geschäftslogik hier
Speichern = True
End Function
' In UserForm:
Private Sub cmdOK_Click()
Dim kunde As New clsKunde
kunde.Name = txtName.Value
kunde.Region = cboRegion.Value
kunde.Speichern
End Sub
Login-Form Template
Private Sub cmdLogin_Click()
Dim user As String, pw As String
user = txtUsername.Value
pw = txtPassword.Value
' Validierung gegen Tabelle
Dim wsUsers As Worksheet
Set wsUsers = Worksheets("Users")
Dim found As Range
Set found = wsUsers.Range("A:A").Find(user)
If Not found Is Nothing Then
If found.Offset(0, 1).Value = pw Then
MsgBox "Login erfolgreich!"
Unload Me
Else
MsgBox "Falsches Passwort!", vbCritical
End If
Else
MsgBox "Benutzer nicht gefunden!", vbCritical
End If
End Sub
Dim user As String, pw As String
user = txtUsername.Value
pw = txtPassword.Value
' Validierung gegen Tabelle
Dim wsUsers As Worksheet
Set wsUsers = Worksheets("Users")
Dim found As Range
Set found = wsUsers.Range("A:A").Find(user)
If Not found Is Nothing Then
If found.Offset(0, 1).Value = pw Then
MsgBox "Login erfolgreich!"
Unload Me
Else
MsgBox "Falsches Passwort!", vbCritical
End If
Else
MsgBox "Benutzer nicht gefunden!", vbCritical
End If
End Sub
Fazit
UserForms machen VBA-Makros benutzerfreundlich:
- ✅ Professionelle GUI statt InputBox
- ✅ Validierung verhindert Fehler
- ✅ ComboBoxen für Auswahlen
- ✅ Multi-Page für komplexe Formulare