beraten
programmieren
implementieren
trainieren
Ein- und Ausgaben
Allgemein
Sie wollen den User in einem Meldungsfenster über einen bestimmten Umstand informieren oder den User mit einer Ja-/Nein-Meldung zu einer Entscheidung zwingen. Hierzu stellt VBA die Funktion MsgBox zur Verfügung. Um vom User einen Eingabewert zu erhalten, verwenden Sie die Funktion InputBox.
Die folgenden Codebeispiele verwenden die Anweisung Debug.Print um in das Ausgabefenster zu schreiben. Blenden Sie das Ausgabefenster im VBA-Editor über den Menübefehl Ansicht - Direktfenster ein.
InputBox
Durch den Aufruf von InputBox erscheint ein Dialogfenster, in dem der User eine Eingabe tätigen kann. Neben der verpflichtenden Angabe des Dialogtextes kann optional auch der Titel und ein Vorgabewert angegeben werden. Der Funktionswert von InputBox ist der Inhalt des Eingabefeldes und vom Datentyp String. Klickt der User auf Abbrechen oder lässt das Eingabefeld leer, liefert InputBox eine leere Zeichenkette.
'Einlesen einer Eingabe mit InputBox
Dim result As String
result = InputBox("Geben Sie Ihren Namen ein:", "Eingabe", "Mustermann")
Debug.Print result
Das Dialogfenster sollte so aussehen:
Nach dem Schliessen des Dialogfensters sollte der Wert der Variable result im Direktfenster aufscheinen.
Um den User zu einer Eingabe zu zwingen, legen Sie den Aufruf von InputBox in eine Schleife. Solange der User das Eingabefeld leer lässt oder auf Abbrechen klickt, wird die InputBox-Anweisung wieder ausgeführt.
'Zwingende Eingabe
Dim result As String
Do
result = InputBox("Geben Sie Ihren Namen ein:", "Eingabe", "Mustermann")
Loop While result = ""
Debug.Print result
Der User hat die Möglichkeit, durch Eingabe eines Leerzeichens die zwingende Eingabe zu umgehen. Soll auch das verhindert werden, entfernen Sie in der Schleifenbedinung etwaige führende bzw. nachgestellte Leerzeichen mit Hilfe der Funktion Trim.
'Zwingende Eingabe strenger
Dim result As String
Do
result = InputBox("Geben Sie Ihren Namen ein:", "Eingabe", "Mustermann")
Loop While Trim(result) = ""
Debug.Print result
Wie erwähnt hat der Funktionswert von InputBox den Datentyp String. Sie können den Aufruf von InputBox auch einer Variable eines anderen Datentyps zuweissen.
Ist VBA in der Lage, die Eingabe des Benutzers implizit in den korrekten Datentyp zu konvertieren, so wird dies auch durchgeführt. Sie können auch ein explizite Konvertierung durch Aufruf der entsprechenden Konvertierungsfunktion durchführen. Schlägt die Konvertierung fehl, so erscheint eine Laufzeitfehlermeldung.
'Implizite Konvertierung der Eingabe
Dim zahl1 As Integer
Dim zahl2 As Integer
zahl1 = InputBox("Erste Zahl:", "Eingabe")
zahl2 = InputBox("Zweite Zahl:", "Eingabe")
Debug.Print zahl1 + zahl2
'Explizite Konvertierung der Eingabe
Dim zahl1 As Integer
Dim zahl2 As Integer
zahl1 = CInt(InputBox("Erste Zahl:", "Eingabe"))
zahl2 = CInt(InputBox("Zweite Zahl:", "Eingabe"))
Debug.Print zahl1 + zahl2
Klickt der Benutzer in obigen zwei Beispielen auf Abbrechen oder gibt einen Wert ein, der sich nicht in eine Zahl konvertieren lässt, erscheint eine Laufzeitfehlermeldung. Diese müsste durch entsprechende Fehlerbehandlung abgefangen werden.
MsgBox
Um einen Meldungsdialog anzuzeigen, der den User nur informiert, rufen Sie die Anweisung MsgBox auf. Neben der verpflichtenden Angabe des Dialogtextes kann optional auch gesteuert werden, welche Schaltflächen und Icons angezeigt werden. Als drittes optionales Argument kann der Dialogtitel angegeben werden.
Beachten Sie, dass in diesem Fall die Anweisung MsgBox als Prozedur aufgerufen wird, die keinen Funktionswert (Rückgabewert) liefert. Aus diesem Grund sind die Argument nicht in runden Klammern anzuführen.
'Meldungsdialog mit Info-Icon
MsgBox "Eine Meldung", vbInformation, "Meldung"
Das Dialogfenster sollte so aussehen:
Wollen Sie einen Meldungsdialog anzeigen, der den User zu einer Entscheidung zwingt, müssen Sie die Anweisung MsgBox als Prozedur aufrufen, die einen Funktionswert (Rückgabewert) liefert. Dies macht es erforderlich, die Argumente in runden Klammern anzuführen.
Das zweite Argument steuert, welche Schaltflächen im Meldungsdialog angezeigt werden. Der Datentyp des Funktionswertes der MsgBox ist VbMsgBoxResult.
'Meldungsdialog mit Ja-/Nein-Schaltflächen
Dim result As VbMsgBoxResult
result = MsgBox("Wollen Sie fortfahren?", vbYesNo, "Frage")
If result = vbYes Then
Debug.Print "Fortfahren"
Else
Debug.Print "Nicht fortfahren"
End If
Das Dialogfenster sollte so aussehen:
Klickt der Benutzer auf die Schalftläche Ja, ist der Funktionswert gleich vbYes. Klickt der Benutzer auf Nein, wäre der Funktionswert gleich vbNo.
Standardmässig hat die erste Schaltfläche den Fokus, d. h. betätigt der User die Enter-Taste, ist das gleichbedeutend wie ein Klick auf die erste Schaltfläche. Sie können das zweite Argument erweitern, um den Fokus auf die zweite Schaltfläche zu legen.
'Meldungsdialog mit Ja-/Nein-Schaltflächen und Fokus auf der Nein-Schaltfläche
Dim result As VbMsgBoxResult
result = MsgBox("Wollen Sie fortfahren?", vbYesNo + vbDefaultButton2, "Frage")
If result = vbYes Then
Debug.Print "Fortfahren"
Else
Debug.Print "Nicht fortfahren"
End If
Sie können die Anweisung MsgBox auch direkt als Teil einer Überprüfung verwenden.
'Meldungsdialog mit Ja-/Nein-Schaltflächen
If MsgBox("Wollen Sie fortfahren?", vbYesNo, "Frage") = vbYes Then
Debug.Print "Fortfahren"
Else
Debug.Print "Nicht fortfahren"
End If
Download Codebeispiele
Die gezeigten Codebeispiele können Sie als xlsm-Datei herunterladen.