Microsoft Excel

Herbers Excel/VBA-Archiv

Informationen und Beispiele zum Thema MsgBox
BildScreenshot zu MsgBox MsgBox-Seite mit Beispielarbeitsmappe aufrufen

mehrere MsgBoxen miteinander verküpfen

Betrifft: mehrere MsgBoxen miteinander verküpfen von: Fred Feuerstein
Geschrieben am: 10.03.2016 16:45:06

Hallo zusammen,

ich bin gerade wieder am verzweifeln :-(

ich möchte beim Speichern das mehrere MsgBoxen hintereinander aufgehen je nachdem ob ja oder nein betätigt wird.

der Code für die Grund-MsgBox ist wie folgt:

Dim byWert As Byte
byWert = MsgBox("Text", 4, "")
If byWert = 6 Then
....
ElseIf byWert = 7 Then
....
End If

Die erste MsgBox habe ich unter der Prozedur Before_Save eingefügt. Die nachfolgenden unter Module, mit "Call ..."

Jetzt solle folgendes beim speichern passieren:

1. Speichern drücken
2. MsgBox = "Haben Sie eine Veränderung an der Datei durchgeführt?
Nein = MsgBox "Die Datei wird jetzt gespeichert"Speichern erfolgt
Ja = zweite MsgBox öffnet sich

3. zweite MsgBox = "Waren die Veränderungen in Bereich A?
Nein = dritte MsgBox öffnet sich
Ja = vierte MsgBox öffnet sich

4. dritte MsgBox = "Die Änderungen werden gespeichert" speichern erfolgt

5. vierte MsgBox = "Haben Sie die Veränderungen auf einer separaten Karte gedruckt?"
Nein = fünfte MsgBox = "Die Änderungen wurden nicht gespeichert, drucken Sie die Karte!" speichern abbrechen
Ja = sechste MsgBox öffnet sich

6. sechste MsgBox = "Bitte legen Sie die Karte in die Ablage" speichern erfolgt

Ich habe das mit dem MsgBoxen die sich hintereinander öffnen, über Module hinbekommen, allerdings klappt es nicht, das ich aus einem Modul den Speichervorgang abbreche, bzw. aus dem Modul einen Sub in der Arbeitsmappe anspreche, falls man das Speichern nur in "dieseArbeitsmappe" abbrechen könnte.

Er speichert immer, egal welche MsgBox gewählt wird. :-(

Hatte auch versucht, direkt die MsgBoxen untereinander in "dieseArbeitsmappe" im Sub Before_Save zu "verknüpfen", aber da müssen dann Zeilen beim durchlaufen des Codes einiger MsgBoxen übersprungen werden, je nachdem was der Anwender drückt. Hat also auch nicht funktioniert...

Hat jemand eine Idee, wie man in dem Fall den "Weg des Durchlaufens" realisieren kann?

Viele Grüße
Fred

  

Betrifft: AW: mehrere MsgBoxen miteinander verküpfen von: ChrisL
Geschrieben am: 10.03.2016 18:29:15

Hi Fred

Interessante Frage. Bekanntlich führen viele Weg zum Abbruch und ich bin gespannt, welche Ansätze sonst noch vorgeschlagen werden.

1. Grundsätzlich könntest du es auch innerhalb Before_Save realisieren. Dazu müsstest du die If-Then in einander verschachteln. Der Code wird aber zugegeben sehr unübersichtlich.

2. Überspringen (ich nehme an, du meinst "GoTo"), auch nicht schön.

3. Unter-Prozeduren wie von dir vorgeschlagen und wie du schon richtig festgestellt hast, muss der Abbruch-Befehl zurück ins Before_Save. Dies könnte mit einer globalen/public Variable geschehen.

4. Meine bevorzugte Variante ist mit Funktionen arbeiten. Funktionen sind fast gleich wie Prozeduren, nur hast du die Gelegenheit einen Wert zurück zu geben. In diesem Beispiel True/False, was der Abbruchbefehl ist. Abstrakt sieht es dann wie folgt aus:

Before_Save:
If AbbruchFragen = True Then
Cancel = True
Else
mach was
End If

Function AbbruchFragen() As Boolean
If Frage1 = True Then
  AbbruchFragen = True
  Exit Function
End If
If Frage2 = True Then
  AbbruchFragen = True
  Exit Function
End If
'usw.
End Function
Function Frage1() As Boolean
Dim byWert As Byte
byWert = MsgBox("Text", 4, "")
If byWert = 6 Then Frage1 = True
End Function

Function Frage2() As Boolean
Dim byWert As Byte
byWert = MsgBox("Text", 4, "")
If byWert = 6 Then Frage2 = True
End Function

Man könnte theoretisch noch einen Schritt weiter gehen und die MsgBox-en, welche identisch sind, ebenfalls in eine Funktion verpacken.
Sub test()
If FrageBox("Dies ist meine Frage") = True Then MsgBox "Antwort ja"
If FrageBox("Jetzt eine andere Frage") = True Then MsgBox "Antwort ja"
End Sub

Function FrageBox(strFrage As String) As Boolean
Dim byWert As Byte
byWert = MsgBox(strFrage, 4, "")
If byWert = 6 Then FrageBox = True
End Function


Ich hoffe der Lösungsansatz gefällt.

cu
Chris


PS: I love functions :)


 

Beiträge aus den Excel-Beispielen zum Thema "mehrere MsgBoxen miteinander verküpfen"