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

  1. VBA-Editor (Alt + F11)
  2. Einfügen → UserForm
  3. Leeres Formular erscheint + Werkzeugkasten

Schritt 2: Controls hinzufügen

Aus der Toolbox ziehen:

Controls: TextBox, ComboBox, ListBox

TextBox (Eingabefeld)

Private Sub cmdOK_Click()
  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

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

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

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

Multi-Page Formulare

Für komplexe Formulare nutzen Sie MultiPage Control:

  1. MultiPage aus Toolbox einfügen
  2. Rechtsklick → "Neue Seite" für zusätzliche Tabs
  3. 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

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

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

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

Fazit

UserForms machen VBA-Makros benutzerfreundlich:


Das könnte Sie auch interessieren:

VBA-Projekt anfragen