Dialog-Objekte in VBA: mit dem Nutzer kommunizieren
Damit ein Makro nicht nur stumm im Hintergrund arbeitet, bietet VBA verschiedene Dialog-Objekte: einfache Meldungsfenster mit MsgBox, Eingabeaufforderungen mit InputBox, den Zugriff auf Excels eigene Standarddialoge über Application.Dialogs sowie frei gestaltbare UserForms für komplexere Eingabemasken.
MsgBox – Meldungen anzeigen
MsgBox "Die Berechnung ist abgeschlossen.", vbInformation, "Excel-Training"
Der erste Parameter ist der Meldungstext, der zweite bestimmt Symbol und Schaltflächen (z. B. vbInformation, vbExclamation, vbYesNo), der dritte optional den Fenstertitel.
Rückgabewert auswerten (Ja/Nein-Abfrage)
If MsgBox("Änderungen wirklich speichern?", vbYesNo + vbQuestion, "Bestätigung") = vbYes Then
ActiveWorkbook.Save
End If
InputBox – Eingabe abfragen
Dim Name As String
Name = InputBox("Bitte Kundennamen eingeben:", "Neuer Kunde")
If Name <> "" Then
Range("A1").Value = Name
End If
Klickt der Nutzer auf Abbrechen, liefert InputBox einen leeren Text zurück – deshalb lohnt sich immer eine Prüfung, bevor der Wert weiterverarbeitet wird.
| A | |
|---|---|
| 1 | Musterfirma GmbH |
Application.Dialogs – Excel-Standarddialoge nutzen
Statt eigene Fenster zu bauen, kannst du auch die eingebauten Dialoge von Excel selbst per VBA öffnen, z. B. den Speichern-unter-Dialog:
Application.Dialogs(xlDialogSaveAs).Show
Für den modernen Datei-öffnen-Dialog eignet sich besser Application.FileDialog(msoFileDialogOpen) – er ist flexibler konfigurierbar (Startordner, Dateityp-Filter) als die älteren xlDialog…-Konstanten.
UserForms – eigene Dialogfenster gestalten
Für mehrere Eingabefelder, Auswahllisten oder Kontrollkästchen auf einmal reicht eine einfache InputBox nicht mehr. Dafür gibt es UserForms – im VBA-Editor über Einfügen → UserForm erstellst du ein eigenes Fenster, das du per Drag & Drop mit Steuerelementen (Textfeld, Listenfeld, Schaltfläche …) bestückst.
- Im VBA-Editor: Einfügen → UserForm.
- Aus der Werkzeugsammlung Steuerelemente auf das Formular ziehen (z. B.
TextBox,CommandButton). - Doppelklick auf eine Schaltfläche öffnet den Code-Bereich für deren
Click-Ereignis. - Formular aus einem Makro heraus öffnen mit
UserForm1.Show.
Solange ein UserForm angezeigt wird (Standardmodus modal), ist die Excel-Oberfläche dahinter blockiert. Für nicht-blockierende Formulare wird die Eigenschaft Show vbModeless benötigt – dann kann der Nutzer parallel weiter in der Tabelle arbeiten.
Häufige Fehler
- Laufzeitfehler bei Application.Dialogs – manche
xlDialog…-Konstanten wurden mit neueren Excel-Versionen entfernt oder verändert; im ZweifelApplication.FileDialogbevorzugen. - InputBox-Ergebnis lässt sich nicht rechnen – InputBox liefert immer Text zurück, auch bei Zahlen-Eingabe. Mit
CDbl(...)oderVal(...)in eine Zahl umwandeln. - MsgBox-Symbol/Schaltflächen falsch kombiniert – die VBA-Konstanten werden addiert (
vbYesNo + vbQuestion); ein Komma statt+führt zu einem Syntaxfehler.