Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

msg box und makro beenden - aber wie?

Forumthread: msg box und makro beenden - aber wie?

msg box und makro beenden - aber wie?
18.08.2016 13:00:59
Eric
Liebe Forumsmitlieder,
ich stelle mich gerade ein bisschen dusslig an. Ich möchte folgendes:
Hier erstmal der Code bisher:
If vollsum = AuflGesB
Then MsgBox ("Prüfung Case b)erfolgreich. Dokument kann nun an Herstellung gesendendet werden"), Range("A1").Value = 1
Else MsgBox ("Steckmenge Case b) entspricht nicht der Gesamtauflage")
Jetzt soll im Else Block zusätzlich zu der msgbox das komplette Makro beendet werden. Aber auch nur wenn der Else Block zutrifft.
Kann mir da jemand hier den zündenden Tipp geben?
Besten Dank und Grüße,
Eric
Anzeige

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: msg box und makro beenden - aber wie?
18.08.2016 13:11:27
Daniel
Hi
bei aufwendigeren IF-Then sollte man nach dem Then und dem Else eine neue Zeile beginnen, dann kann man auch in jedem Block mehrere Befehle ausführen lassen:
If vollsum = AuflGesB Then
MsgBox ("Prüfung Case b)erfolgreich. Dokument kann nun an Herstellung gesendendet werden")
Range("A1").Value = 1
Else
MsgBox ("Steckmenge Case b) entspricht nicht der Gesamtauflage")
Exit Sub
End if
"Exit Sub" beendet das Makro.
Sollte das Makro aber von einem übergeordneten Makro aufgerufen worden sein, so wird dieses dann weiter ausgeführt, so wie wenn der Code normal bis zum End Sub durchgelaufen wäre.
Gruß Daniel
Anzeige
AW: msg box und makro beenden - aber wie?
18.08.2016 14:20:32
Eric
Hallo Daniel,
vielen Dank für die Antwort. Nachdem ich nun meine Code umgestellt habe und das exit sub eingefügt habe, habe ich nun das Problem, dass beim Kompilieren die Meldung "Case ohne Select Case" erscheint. Hier der vollständige Code:
Sub PrüfenSteckung()
Dim Steckart As Range
Dim vollsum
Set Steckart = Range("D27")
Set AuflGesA = Range("D21")
Set AuflGesB = Range("M21")
Set AuflGesC = Range("O21")
Select Case Steckart
Case "Vollsteckung"
vollsum = WorksheetFunction.Sum(Range("E38:E88"), Range("M38:M88"), Range("U38:U88"))
If vollsum = AuflGesA Then
MsgBox ("Prüfung Case a) erfolgreich. Dokument kann nun an Herstellung gesendendet  _
werden"), Range("A1").Value = 1
Else
MsgBox ("Steckmenge Case a) entspricht nicht der Gesamtauflage")
vollsum = WorksheetFunction.Sum(Range("G36:G58"), Range("O36:O58"), Range("W36:W58"))
If vollsum = AuflGesB Then
MsgBox ("Prüfung Case b)erfolgreich. Dokument kann nun an Herstellung gesendendet  _
werden"), Range("A1").Value = 1
Else
MsgBox ("Steckmenge Case b) entspricht nicht der Gesamtauflage")
vollsum = WorksheetFunction.Sum(Range("I36:I58"), Range("Q36:Q58"), Range("Y36:Y58"))
If vollsum = AuflGesC Then
MsgBox ("Prüfung Case c)erfolgreich. Dokument kann nun an Herstellung gesendendet  _
werden"), Range("A1").Value = 1
Else
MsgBox ("Steckmenge Case c) entspricht nicht der Gesamtauflage")
Case "Teilsteckung"
vollRampSum = WorksheetFunction.Sum(Range("E38:E88"), Range("M38:M88"), Range("U38:U88") _
, Range("D29"))
If vollRampSum = AuflGesA Then
MsgBox ("Prüfung Case a) erfolgreich. Dokument kann nun an Herstellung gesendendet  _
werden"), Range("A1").Value = 1
Else
MsgBox ("Steck- und Rampenmenge Case a) entsprechen nicht der Gesamtauflage")
vollRampSum = WorksheetFunction.Sum(Range("G36:G58"), Range("O36:OQ58"), Range("W36:W58" _
), Range("D29"))
If vollRampSum = AuflGesB Then
MsgBox ("Prüfung Case b) erfolgreich. Dokument kann nun an Herstellung gesendendet  _
werden"), Range("A1").Value = 1
Else
MsgBox ("Steck- und Rampenmenge Case b) entsprechen nicht der Gesamtauflage")
vollRampSum = WorksheetFunction.Sum(Range("I36:I58"), Range("Q36:Q58"), Range("Y36:Y58") _
, Range("D29"))
If vollRampSum = AuflGesC Then
MsgBox ("Prüfung Case c) erfolgreich. Dokument kann nun an Herstellung gesendendet  _
werden"), Range("A1").Value = 1
Else
MsgBox ("Steck- und Rampenmenge Case c) entsprechen nicht der Gesamtauflage")
Case "Nein"
vollRampSum = Range("D29")
If vollRampSum = AuflGesA Then
MsgBox ("Prüfung Case a) erfolgreich. Dokument kann nun an Herstellung gesendendet  _
werden"), Range("A1").Value = 1
Else
MsgBox ("Steck- und Rampenmenge Case a) entsprechen nicht der Gesamtauflage")
vollRampSum = Range("M29")
If vollRampSum = AuflGesB Then
MsgBox ("Prüfung Case b) erfolgreich. Dokument kann nun an Herstellung gesendendet  _
werden"), Range("A1").Value = 1
Else
MsgBox ("Steck- und Rampenmenge Case b) entsprechen nicht der Gesamtauflage")
vollRampSum = Range("O29")
If vollRampSum = AuflGesC Then
MsgBox ("Prüfung Case c) erfolgreich. Dokument kann nun an Herstellung gesendendet  _
werden"), Range("A1").Value = 1
Else
MsgBox ("Steck- und Rampenmenge Case c) entsprechen nicht der Gesamtauflage")
End Select
End Sub
Mit meiner alten Struktur gab es die Fehlermeldung nicht.
Irgendeine Idee was hier nicht stimmt?
Grüße,
Eric
Anzeige
AW: Crossposting, im VBA-Forum gelöst
20.08.2016 17:48:45
Werner
Hallo Eric,
ganz toll, Crossposting ohne einen Hinweis darauf in den unterschiedlichen Foren. Die Gefahr, dass dann Helfer für den Papierkorb arbeiten ist ziemlich groß.
Zumal das Problem bereits gelöst wurde ohne dass du es für nötig hälst das hier mitzuteilen.
http://www.vba-forum.de/Forum/View.aspx?ziel=29886-msg_box_und_makro_beenden_-_aber_wie?
Gruß Werner
Anzeige
;
Anzeige
Anzeige

Infobox / Tutorial

MsgBox in Excel VBA richtig verwenden und Makros beenden


Schritt-für-Schritt-Anleitung

Um eine MsgBox in deinem Excel VBA Makro zu verwenden und gleichzeitig das Makro zu beenden, kannst du den folgenden Code als Vorlage nutzen. Hier sind die Schritte:

  1. Öffne den VBA-Editor: Drücke ALT + F11 in Excel.

  2. Füge ein neues Modul hinzu: Klicke auf "Einfügen" > "Modul".

  3. Kopiere den folgenden Code in das Modul:

    Sub PrüfenSteckung()
        Dim Steckart As Range
        Dim vollsum As Double
        Set Steckart = Range("D27")
        Set AuflGesA = Range("D21")
        Set AuflGesB = Range("M21")
        Set AuflGesC = Range("O21")
    
        Select Case Steckart.Value
            Case "Vollsteckung"
                vollsum = WorksheetFunction.Sum(Range("E38:E88"), Range("M38:M88"), Range("U38:E88"))
                If vollsum = AuflGesA Then
                    MsgBox "Prüfung Case a) erfolgreich. Dokument kann nun an Herstellung gesendet werden"
                    Range("A1").Value = 1
                Else
                    MsgBox "Steckmenge Case a) entspricht nicht der Gesamtauflage"
                    Exit Sub ' Makro beenden
                End If
            ' Füge weitere Cases nach Bedarf hinzu
        End Select
    End Sub
  4. Führe das Makro aus: Gehe zurück zu Excel, drücke ALT + F8, wähle das Makro „PrüfenSteckung“ und klicke auf „Ausführen“.


Häufige Fehler und Lösungen

  • Fehler: "Case ohne Select Case"
    Wenn du diese Fehlermeldung erhältst, überprüfe, ob du alle Case-Befehle korrekt mit Select Case umschlossen hast. Jeder Case sollte innerhalb des Select Case-Blocks stehen.

  • Problem beim Beenden des Makros
    Wenn das Makro nicht wie gewünscht stoppt, stelle sicher, dass Exit Sub korrekt positioniert ist. Es sollte direkt nach der MsgBox im Else-Block stehen.


Alternative Methoden

Statt MsgBox kannst du auch Application.DisplayAlerts verwenden, um Benutzerwarnungen zu steuern. Dies ist besonders nützlich, wenn du mehrere Meldungen nacheinander anzeigen möchtest, ohne den Benutzer ständig zu unterbrechen.

Application.DisplayAlerts = False
' Dein Code hier
Application.DisplayAlerts = True

Praktische Beispiele

Hier ist ein Beispiel für ein erweitertes Makro, das mehrere Prüfungen mit MsgBox und Makrobeendungen kombiniert:

Sub BeispielMakro()
    Dim Ergebnis As Double
    Ergebnis = 100 ' Beispielwert

    If Ergebnis < 50 Then
        MsgBox "Ergebnis ist zu niedrig."
        Exit Sub
    ElseIf Ergebnis >= 50 And Ergebnis < 75 Then
        MsgBox "Ergebnis ist akzeptabel."
    Else
        MsgBox "Ergebnis ist hervorragend!"
    End If
End Sub

Tipps für Profis

  • Nutze Debug.Print, um Werte während der Ausführung des Codes anzuzeigen, anstatt immer eine MsgBox zu verwenden. Dies hilft, das Makro effizienter zu gestalten.

  • Verwende Fehlerbehandlung mit On Error Resume Next, um unerwartete Fehler zu umgehen, ohne das gesamte Makro zu stoppen.

On Error Resume Next
' Dein Code hier
If Err.Number <> 0 Then
    MsgBox "Ein Fehler ist aufgetreten: " & Err.Description
End If

FAQ: Häufige Fragen

1. Wie kann ich eine MsgBox anpassen?
Du kannst den Text in der MsgBox sowie den Typ der Schaltflächen anpassen. Beispiel: MsgBox "Text", vbYesNo

2. Was passiert, wenn ich das Makro mit Exit Sub verlasse?
Das aktuelle Makro wird beendet, und die Kontrolle wird an den Aufrufer zurückgegeben. Wenn es von einem anderen Makro aufgerufen wurde, wird dieses fortgesetzt.

3. Kann ich mehrere MsgBoxen in einem Makro verwenden?
Ja, du kannst mehrere MsgBoxen verwenden, um verschiedene Benutzerinteraktionen zu steuern. Achte darauf, die Logik deines Codes entsprechend zu strukturieren.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige