HERBERS Excel-Forum - die Dialoge

Thema: MessageBox

Home


Die sehr simpel erscheinende MessageBox hat bei näherer Betrachtung einiges an Möglichkeiten zu bieten. Hier ein ganz normaler MessageBox-Aufruf:

Abbildung - Einfache MessageBox
Einfache MessageBox

An benannten Argumenten können dem Messagebox-Aufruf mitgegeben werden:

ArgumentBeschreibungStatusVoreinstellung
promptDie anzuzeigende MeldungNotwendig 
buttonsDie anzuzeigenden Schaltflächen, das anzuzeigende Symbol, die Bindung und die Vorgabe der StandardschaltflächeOptionalOK
titleDer Text in der blauen Kopfzeile der MeldungOptional 
helpfileDer Dateiname mit Pfad der aufzurufenden HilfedateiOptional 
contextDie Context-Nummer, mit der auf die Hilfedatei zugegriffen wirdOptional 


Klicken Sie in der nachfolgenden Tabelle auf die jeweilige Konstante und es wird ein Beispiel für deren Einsatz im MessageBox-Code angezeigt:

Konstante Wert Beschreibung
vbOKOnly 0 Nur die Schaltfläche OK anzeigen.
vbOKCancel 1 Schaltflächen OK und Abbrechen anzeigen.
vbAbortRetryIgnore 2 Schaltflächen Abbruch, Wiederholen und Ignorieren anzeigen.
VbYesNoCancel 3 Schaltflächen Ja, Nein und Abbrechen anzeigen.
VbYesNo 4 Schaltflächen Ja und Nein anzeigen.
VbRetryCancel 5 Schaltflächen Wiederholen und Abbrechen anzeigen.
VbCritical 16 Meldung mit Stop-Symbol anzeigen.
VbQuestion 32 Meldung mit Fragezeichen-Symbol anzeigen.
VbExclamation 48 Meldung mit Ausrufezeichen-Symbol anzeigen.
VbInformation 64 Meldung mit Info-Symbol anzeigen.
VbDefaultButton1 0 Erste Schaltfläche ist Standardschaltfläche.
VbDefaultButton2 256 Zweite Schaltfläche ist Standardschaltfläche.
VbDefaultButton3 512 Dritte Schaltfläche ist Standardschaltfläche.
VbDefaultButton4 768 Vierte Schaltfläche ist Standardschaltfläche.
VbApplicationModal 0 An die Anwendung gebunden. Der Benutzer muß auf das Meldungsfeld reagieren, bevor er seine Arbeit mit der aktuellen Anwendung fortsetzen kann.
VbSystemModal 4096 An das System gebunden. Alle Anwendungen werden unterbrochen, bis der Benutzer auf das Meldungsfeld reagiert.
vbMsgBoxHelpButton 16384 Fügt der MessageBox eine Hilfe-Schaltfläche hinzu
VbMsgBoxSetForeground 65536 Platziert die MessageBox im Vordergrund
vbMsgBoxRight 524288 Der Text wird linksbündig ausgerichtet
vbMsgBoxRtlReading 1048576 Legt die Schreibrichtung des Textes von links nach rechts für arabisches und jüdisches System fest

Die erste Gruppe von Werten (0 - 5) beschreibt die Anzahl und den Typ der im Dialogfeld angezeigten Schaltflächen. Die zweite Gruppe (16, 32, 48, 64) beschreibt die Symbolart. Die dritte Gruppe (0, 256, 512) legt die Standardschaltfläche fest. Die vierte Gruppe (0, 4096) legt fest, in welcher Form das Dialogfeld gebunden ist. Verwenden Sie beim Addieren der Zahlen zu einem Gesamtwert für das Argument buttons nur eine Zahl aus jeder Gruppe.

Anmerkung   Diese Konstanten sind durch Visual Basic für Applikationen festgelegt. Daher können die Namen an einer beliebigen Stelle im Code anstelle der tatsächlichen Werte verwendet werden.

Rückgabewerte

Konstante Wert Beschreibung
vbOK 1 OK
vbCancel 2 Abbrechen
vbAbort 3 Abbruch
vbRetry 4 Wiederholen
vbIgnore 5 Ignorieren
vbYes 6 Ja
vbNo 7 Nein


Die Schaltflächen

Konstante vbOkOnly


Sub MeldungA()
   Dim iClick As Integer
   iClick = MsgBox( _
      prompt:="Meldung aus Excel!", _
      Buttons:=vbOKOnly)
   MsgBox "Rückgabewert: " & iClick
End Sub
Der Dialog wird mit OK beendet:
MeldungRückgabewert
Abbildung - Meldung vbOkOnly
Meldung vbOKOnly
Abbildung - Rückgabewert vbOkOnly
Rückgabewert vbOKOnly

Konstante vbOkCancel


Sub MeldungB()
   Dim iClick As Integer
   iClick = MsgBox( _
      prompt:="OK oder abbrechen?", _
      Buttons:=vbOKCancel)
   If iClick = vbOK Then
      MsgBox "OK"
   Else
      MsgBox "Abbrechen"
   End If
End Sub
In der Prozedur wird in Abhängigkeit der angeklickten Schaltfläche verzweigt:
MeldungVerzweigung OKVerzweigung Abbrechen
Abbildung - Meldung vbOkCancel
Meldung vbOKCancel
Abbildung - Verzweigung OK
Verzweigung OK
Abbildung - Verzweigung Abbrechen
Verzweigung Abbrechen

Konstante VbAbortRetryIgnore


Sub MeldungC()
   Dim iClick As Integer
   iClick = 4
   Do While iClick = 4
      iClick = MsgBox( _
         prompt:="Abbrechen, wiederholen oder ignorieren?", _
         Buttons:=vbAbortRetryIgnore)
      If iClick = vbRetry Then
         MsgBox "Ich wiederhole!"
      ElseIf iClick = vbIgnore Then
         MsgBox "Ich ignoriere!"
      End If
   Loop
End Sub
In der Prozedur wird in Abhängigkeit der angeklickten Schaltfläche verzweigt; bei Klick auf die Wiederholen-Schaltfläche wird der vbAbortRetryIgnore-Dialog erneut aufgerufen:
MeldungVerzweigung WiederholenVerzweigung Ignorieren
Abbildung - Meldung VbAbortRetryIgnore
Meldung VbAbortRetryIgnore
Abbildung - Verzweigung Wiederholen
Verzweigung Wiederholden
Abbildung - Verzweigung Ignorieren
Verzweigung Ignorieren

Konstante VbYesNoCancel


Sub MeldungD()
   Dim iClick As Integer
   iClick = MsgBox( _
         prompt:="Ja, nein oder abbrechen?", _
         Buttons:=vbYesNoCancel)
   If iClick = vbYes Then
      MsgBox "Ja"
   ElseIf iClick = vbNo Then
      MsgBox "Nein"
   ElseIf iClick = vbCancel Then
      MsgBox "Abbrechen"
   End If
End Sub
In der Prozedur werden in Abhängigkeit der geklickten Schaltfläche Werte zurückgeliefert, die weiterverarbeitet werden können:
MeldungRückgabewert JaRückgabewert NeinRückgabewert Abbrechen
Abbildung - Meldung VbJesNoCancel
Meldung VbJesNoCancel
Abbildung - Rückgabewert Ja
Rückgabewert Ja
Abbildung - Rückgabewert Nein
Rückgabewert Nein
Abbildung - Verzweigung Abbrechen
Rückgabewert Abbrechen

Konstante VbYesNo


Sub MeldungE()
   Dim iClick As Integer
   iClick = MsgBox( _
         prompt:="Ja oder nein?", _
         Buttons:=vbYesNo)
   If iClick = vbYes Then
      MsgBox "Ja"
   ElseIf iClick = vbNo Then
      MsgBox "Nein"
   End If
End Sub
In der Prozedur werden in Abhängigkeit der geklickten Schaltfläche Werte zurückgeliefert, die weiterverarbeitet werden können:
MeldungRückgabewert JaRückgabewert Nein
Abbildung - Meldung VbJesNo
Meldung VbJesNo
Abbildung - Rückgabewert Ja
Rückgabewert Ja
Abbildung - Rückgabewert Nein
Rückgabewert Nein

Konstante VbRetryCancel


Sub MeldungF()
   Dim iClick As Integer
   iClick = 4
   Do While iClick = 4
      iClick = MsgBox( _
         prompt:="Abbrechen oder wiederholen", _
         Buttons:=vbRetryCancel)
      If iClick = vbRetry Then
         MsgBox "Ich wiederhole!"
      ElseIf iClick = vbCancel Then
         MsgBox "Abbrechen"
      End If
   Loop
End Sub
In der Prozedur wird in Abhängigkeit der angeklickten Schaltfläche verzweigt; bei Klick auf die Wiederholen-Schaltfläche wird der VbRetryCancel-Dialog erneut aufgerufen:
MeldungVerzweigung WiederholenVerzweigung Abbrechen
Abbildung - Meldung VbRetryCancel
Meldung VbRetryCancel
Abbildung - Verzweigung Wiederholen
Verzweigung Wiederholden
Abbildung - Verzweigung Abbrechen
Verzweigung Abbrechen

Die Symbole

Konstanten VbCritical, VbQuestion, VbExclamation und VbInformation


Sub MeldungG()
   Dim iCounter As Integer
   For iCounter = 16 To 64 Step 16
      MsgBox "Symbole", iCounter
   Next iCounter
End Sub
VbCriticalVbQuestionVbExclamationVbInformation
Abbildung - Symbol VbCritical
Symbol VbCritical
Abbildung - Symbol VbQuestion
Symbol VbQuestion
Abbildung - Symbol VbExclamation
Symbol VbExclamation
Abbildung - Symbol VbInformation
Symbol VbInformation

Die Standardschaltflächen

Konstanten VbDefaultButton1, VbDefaultButton2, VbDefaultButton3 und VbDefaultButton4


Sub MeldungH()
   Dim iCounter As Integer, iMsg As Integer
   For iCounter = 0 To 512 Step 256
      iMsg = iMsg + 1
      MsgBox _
         prompt:=iMsg & ". Schaltfläche ist Standardschaltfläche", _
         Buttons:=iCounter + vbAbortRetryIgnore
   Next iCounter
End Sub
VbDefaultButton1VbDefaultButton2VbDefaultButton3
Abbildung - VbDefaultButton1
VbDefaultButton1
Abbildung - VbDefaultButton2
VbDefaultButton2
Abbildung - VbDefaultButton3
VbDefaultButton3

Die Bindung und Position der Meldung

Konstante VbApplicationModal


Sub MeldungI()
   MsgBox "Hallo aus Excel", vbApplicationModal
End Sub
Die MessageBox ist an Microsoft Excel gebunden. Sie können in anderen Anwendungen weiterarbeiten, ohne die nur in Excel sichtbare MessageBox zu schließen. Es handelt sich hier um die Voreinstellung.

Konstante VbSystemModal


Sub MeldungJ()
   MsgBox "Hallo aus Excel", vbSystemModal
End Sub
Die MessageBox ist nicht an Microsoft Excel gebunden. Sie können in anderen Anwendungen nicht weiterarbeiten, ohne die auch in anderen Anwendungen sichtbare MessageBox zu schließen.

Konstante VbMsgBoxSetForeground


Sub MeldungK()
   MsgBox "Hallo aus Excel", VbMsgBoxSetForeground
End Sub
Die MessageBox wird im Vordergrund platziert. Dies gilt weder für andere Anwendungen noch für eine zweite Excel-Instanz. Ein unterschiedliches Verhalten zur Normaleinstellung konnte nicht festgestellt werden.

Konstante vbMsgBoxHelpButton


Sub MeldungL()
   Dim sTxt As String, sPrompt As String, sFile As String
   sFile = ThisWorkbook.Path & "\Kontext.chm"
   If Dir(sFile) = "" Then
      Beep
      MsgBox "Hilfedatei existiert nicht!"
      Exit Sub
   End If
   MsgBox _
      prompt:="Aufruf einer Hilfedatei", _
      Buttons:=vbMsgBoxHelpButton, _
      HelpFile:=sFile, Context:="1001"
End Sub
Den MessageBoxes kann eine Hilfeschaltfläche mit damit verbundenen Hilfethemen zugeordnet werden:

Abbildung - Konstante vbMsgBoxHelpButton
Konstante vbMesgBoxHelpButton

Konstante vbMsgBoxRight


Sub MeldungM()
   MsgBox prompt:="Dies ist die erste Zeile" & vbLf & _
      "und dies die zweite", Buttons:=vbMsgBoxRight
End Sub
Der Text einer MsgBox kann rechtsbündig angeordnet werden:

Abbildung - Konstante vbMsgBoxRight