Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

"Exit Sub" nicht genug

Forumthread: "Exit Sub" nicht genug

"Exit Sub" nicht genug
26.01.2006 09:47:21
Franz
Hallo Fachleute,
"Private Sub Worksheet_BeforeRightClick" ruft "Makro2" auf. Am Ende von Makro2 läuft das "Private Sub Worksheet_BeforeRightClick"-Ereignis weiter.
Wenn es jetzt in 'Makro2' einen Fehler gibt, soll NICHTS MEHR weitergehen! Auch der Rest von "Private Sub Worksheet_BeforeRightClick" soll abgebrochen werden! Makro2 kann man mit "Exit Sub" abbrechen. Aber der Rest von "Private Sub Worksheet_BeforeRightClick" wird noch ausgeführt - und das soll nicht sein!
Gibt es eine Anweisung, die bewirkt, dass ab dieser Stelle absolut Schluss ist, sowas wie "Exit All" oder so ähnlich?
Danke schon mal und Grüße
Franz
Anzeige

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
knallhart: end
26.01.2006 09:52:16
yps
hi Franz,
wie siehts in München aus ? schnee ? kälte ?
Berlin hat momentan -8 und dreckige reste von schnee
cu Micha
AW: knallhart: end
26.01.2006 09:56:45
Franz
Hallo Micha,
danke nach Berlin. Hier wird die Kälte ein bissl wärmer, neuen Schnee gab's nicht, beschäftige mich hauptsächlich mit Eis hacken, Splitt streuen und ausgefallenen Heizungen :-////
Beste Grüße
Franz
Anzeige
AW: "Exit Sub" nicht genug
26.01.2006 09:54:53
ANdreas
Hallo Franz,
auch wenns vom Programmierstil nicht ganz so schön ist (man sollte eigentlich immer der aufrufenden Prozedur überlassen was bei einem Fehler in einer Unterfunktion zu geschehen hat) kannst Du das gewünschte mit End erreichen.
Also statt Exit Sub einfach nur End.
Besser wäre es allerdings den Fehler an die aufrufende Sub zu übergeben, damit diese dann selbst bestimmt ob noch weiterer Code ausgeführt wird.
Gruß
Andreas
Anzeige
AW: "Exit Sub" nicht genug
26.01.2006 10:00:26
Franz
Hallo Andreas,
danke, das interessiert mich: "Besser wäre es allerdings den Fehler an die aufrufende Sub zu übergeben" :
wie kann ich eine Fehlernummer (err.number) vom "Makro2" an das erste Makro "Private Sub Worksheet_BeforeRightClick" übergeben? Das wäre mir auch lieber.
Grüße
Franz
Anzeige
AW: "Exit Sub" nicht genug
26.01.2006 10:25:36
ANdreas
Hallo Franz,
so könnte es vereinfacht aussehen:

Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)
Dim lngResult&
' beispielhafter Testaufruf - bei gerade Zeile -> Fehler
lngResult = TestBerechnung(Target.Row)
If lngResult = 0 Then ' nur wenn kein Fehler weiteren Code ausführen
Cancel = True
End If ' Else -> alternativ kann man jetzt auch hier auf versch. Fehler noch reagieren
End Sub

' Rückgabewert: 0 = fehlerfrei ausgeführt, 1 = Fehler aufgetreten
Function TestBerechnung(intParam%) As Long
Dim i#
On Error GoTo ErrorHandler
' Hier Dein jetziger Code in Makro2
' Fehlersimulation: Div durch 0 wenn intParam eine gerade Zahl
i = 5000 / (intParam Mod 2)
TestBerechnung = 0 ' kein Fehler aufgetreten
On Error GoTo 0
Exit Function
ErrorHandler:
TestBerechnung = 1 ' Fehler melden, man kann z.B. auch Fehlernummer mitgeben
End Function
Hoffe das hilft weiter,
Andreas
Anzeige
AW: "Exit Sub" nicht genug
26.01.2006 10:31:18
Franz
Hallo Andreas,
danke, werd ich mal bei mir einbauen, dürfte das Problem lösen. Ich hab ja schon im Makro2 die Fehlernr. abgefragt. Aber auch ohne Error wieder auf 0 zu setzen, wird die Fehlernummer nicht ins aufrufende Makro übernommen, so hab ich's nämlich schon versucht.
Vielen Dank und Grüße
Franz
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige

Infobox / Tutorial

"Exit Sub" oder "End" – Wie man VBA effektiv beendet


Schritt-für-Schritt-Anleitung

Um sicherzustellen, dass in deinem VBA-Code nach einem Fehler nicht weiter ausgeführt wird, kannst du die Verwendung von On Error-Anweisungen in Verbindung mit Exit Sub oder End in Betracht ziehen. Hier ist eine Schritt-für-Schritt-Anleitung:

  1. Fehlerbehandlung aktivieren: Verwende On Error GoTo ErrorHandler, um einen Fehlerhandler zu definieren.

    On Error GoTo ErrorHandler
  2. Deinen Code schreiben: Füge die Logik deines Makros oder deiner Funktion nach der Fehlerbehandlungsanweisung hinzu.

  3. Fehlerhandler definieren: Am Ende deines Codes, bevor du das Sub oder die Funktion verlässt, füge den Fehlerhandler hinzu.

    ErrorHandler:
       ' Fehlerbehandlungscode
       Exit Sub ' oder End
  4. Übergeben von Fehlernummern: Wenn du eine Fehlernummer weitergeben möchtest, kannst du dies tun, indem du eine Funktion erstellst, die den Fehlerstatus zurückgibt.


Häufige Fehler und Lösungen

  • Fehler bleibt bestehen: Wenn du Exit Sub verwendest, wird der Fehler nicht an das aufrufende Sub übergeben. Stelle sicher, dass du den Fehlerstatus in einer Variablen speicherst und zurückgibst.

  • Ereignisse werden nicht gestoppt: Um zu verhindern, dass das aufrufende Ereignis (wie Worksheet_BeforeRightClick) weiter ausgeführt wird, setze eine Bedingung, die prüft, ob ein Fehler vorliegt.


Alternative Methoden

Eine Alternative zu Exit Sub ist die Verwendung von End, obwohl dies nicht empfohlen wird, da es die gesamte Ausführung des Programms stoppt. Eine bessere Praxis ist es, die Kontrolle an die aufrufende Prozedur zurückzugeben, damit diese entscheidet, was zu tun ist. Hier ein Beispiel für die Verwendung von On Error Exit Sub:

Function TestBerechnung(intParam%) As Long
    On Error GoTo ErrorHandler
    ' Beispielcode hier
    Exit Function
ErrorHandler:
    TestBerechnung = 1 ' Fehler melden
End Function

Praktische Beispiele

Hier ist ein Beispiel, wie du Worksheet_BeforeRightClick mit einem eigenen Fehlerhandler verwenden kannst:

Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)
    Dim lngResult As Long
    lngResult = TestBerechnung(Target.Row)
    If lngResult <> 0 Then
        Cancel = True ' Verhindert das Rechtsklick-Menü
    End If
End Sub

Function TestBerechnung(intParam%) As Long
    On Error GoTo ErrorHandler
    ' Simuliere einen Fehler
    Dim i As Double
    i = 5000 / (intParam Mod 2) ' Fehler bei geraden Zahlen
    TestBerechnung = 0
    Exit Function
ErrorHandler:
    TestBerechnung = 1
End Function

Tipps für Profis

  • Verwende On Error Resume Next: Dies kann nützlich sein, um Fehler zu ignorieren, aber sei vorsichtig, da du möglicherweise wichtige Fehler übersiehst.

  • Fehlernummern speichern: Du kannst die Fehlernummer mit Err.Number speichern und an das aufrufende Sub übergeben. So hast du die Möglichkeit, spezifische Fehler zu behandeln.

  • Verwende Debug.Print: Für die Fehlersuche kannst du Fehlerdetails in das Immediate-Fenster ausgeben.


FAQ: Häufige Fragen

1. Was ist der Unterschied zwischen Exit Sub und End?
Exit Sub verlässt nur das aktuelle Sub, während End die gesamte Programm-Ausführung stoppt. Es wird empfohlen, Exit Sub zu verwenden, um saubere Beendigungen zu gewährleisten.

2. Wie kann ich sicherstellen, dass nach einem Fehler nichts mehr ausgeführt wird?
Verwende On Error GoTo und leite die Kontrolle an einen Fehlerhandler weiter, der die Ausführung des restlichen Codes stoppt, wie im Beispiel gezeigt.

3. Kann ich Fehlernummern zwischen Subroutinen übergeben?
Ja, du kannst Fehlernummern in Variablen speichern und diese an andere Subroutinen übergeben, um spezifische Fehlerbehandlungen zu ermöglichen.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige