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

Try/Except in VBA?

Forumthread: Try/Except in VBA?

Try/Except in VBA?
30.04.2009 08:21:38
Daniel
Hallo Zusammen,
in einem meiner Sheets habe ich einen selbst eingebauten Speichervorgang.
Die Datei wird dabei im Netzwerk gespeichert. Ab und An kommt es zu Netzwerkproblemen, die dazu führen, dass es einen Fehlermeldung gibt und die Anwendung dadurch unterbrochen wird. Abgesehen davon, dass es nicht zu Netzwerkausfällen kommen sollte:
welche Möglichkeiten habe ich in VBA damit umzugehen? In anderen Sprachen gibt es try/except.
Wie kann man das in VBA lösen?
Grüße,
Daniel
Anzeige

2
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Try/Except in VBA?
30.04.2009 09:26:03
Klaus
Moin Daniel,
in VBA kann man den Abbruch durch Fehler mit einem GOTO unterbinden:

Sub Test()
On Error Goto MyErrHndl
(dein Code)
Goto NoError
MyErrHndl:
msgbox("Fehler!)
NoError:
End Sub


Brutal, unsauber, unschön, funktioniert. Aber ich lass mal offen, hoffentlich kommt noch eine elegantere Lösung ...
mfg
Klaus M.vdT.

Anzeige
AW: Try/Except in VBA?
30.04.2009 09:32:43
fcs
Hallo Daniel,
ich kenne keine Möglichkeit von VBA aus direkt den Zustand der Netztverbindung vom Betriebssystem abzufragen.
VBA hat aber auch eine Möglichkeit, Fehler kontrolliert zu behandeln.
Hier mal die Grundstruktur mit ein paar Varianten. Innerhalb der Fehlerbehandlung kann man natürlich auch alle Variablen und Objekteigenschaften auswerten, um die Folgeaktionen zu steuern. Die Fehlerbehandlung wird typischer Weise am Ende von Prozeduren eingefügt.
Gruß
Franz

Sub aaTest()
'Hier die Deklaration von Variablen
On Error GoTo Fehler
'ab hier dann der übliche Code
Fehler01: 'Sprungadresse wenn Fehler-Nr. 1001 auftritt
'ab hier dann der übliche Code - Forsetzung
'Fehlerbehandlung
Fehler:   'Sprungadresse aus der On Error - Anweisung
With Err
If .Number  0 Then 'ein Fehler ist aufgetreten
Select Case .Number
'Für jede Fehler-Nummer, die besonders Behandelt werden soll _
Eine Case-Anweisung einfügen
Case 1000
Resume Next 'Mit nachfolgender Zeile weitermachen
Case 1001
Resume Fehler01 'An Sprungadresse weitermachen
Case 1002
'Hier Code zur Krrektur
Resume 'in Fehlerzeile weitermachen
Case Else
'Fehler-Meldung anzeigen und Prozedur beenden
MsgBox "Fehler-Nr. : " & .Number & vbLf & .Description
End If
End With
'ab hier dann noch Anweisungen, die auch nach einem Fehler noch zwingend _
ausgeführt werden sollen. z.B.
Application.EnableEvents = True
Application.ScreenUpdating = True
End Sub


Anzeige
;
Anzeige

Infobox / Tutorial

Fehlerbehandlung in VBA: Try/Except-Alternativen


Schritt-für-Schritt-Anleitung

In VBA gibt es keine direkte Entsprechung für das try/catch-Konzept, wie es in anderen Programmiersprachen existiert. Stattdessen verwendet VBA die On Error-Anweisung zur Fehlerbehandlung. Hier ist eine einfache Schritt-für-Schritt-Anleitung, wie Du eine grundlegende Fehlerbehandlung implementierst:

  1. Fehlerbehandlungsmodus aktivieren: Verwende die On Error GoTo-Anweisung, um auf einen Fehler zu reagieren.

    Sub FehlerbehandlungBeispiel()
       On Error GoTo FehlerHandler
       ' Dein Code hier
       Exit Sub
    
    FehlerHandler:
       MsgBox "Ein Fehler ist aufgetreten: " & Err.Description
    End Sub
  2. Fehler behandeln: Innerhalb des Fehlerhandlers kannst Du spezifische Aktionen ausführen, wie das Protokollieren des Fehlers oder das Beenden des Codes.

  3. Code beenden: Stelle sicher, dass Du nach der Fehlerbehandlung einen Exit Sub-Befehl einfügst, um zu verhindern, dass der Fehlerhandler bei einem erfolgreichen Durchlauf erreicht wird.


Häufige Fehler und Lösungen

  • Fehler: "Typ nicht zutreffend"

    • Lösung: Überprüfe die Variablenzuweisungen und stelle sicher, dass die Typen korrekt sind.
  • Fehler: "Index außerhalb des gültigen Bereichs"

    • Lösung: Achte darauf, dass Du auf gültige Array-Indizes oder Excel-Range-Objekte zugreifst.
  • Fehler: "Prozedur oder Funktion nicht gefunden"

    • Lösung: Überprüfe den Namen der Funktion oder stelle sicher, dass Du die richtigen Bibliotheken referenzierst.

Alternative Methoden

Wenn Du eine umfassendere Fehlerbehandlung benötigst, kannst Du die Select Case-Anweisung verwenden, um spezifische Fehlernummern zu behandeln:

Sub ErweiterteFehlerbehandlung()
    On Error GoTo FehlerHandler
    ' Dein Code hier
    Exit Sub

FehlerHandler:
    Select Case Err.Number
        Case 1001
            MsgBox "Fehler 1001: Benutzerdefinierte Nachricht."
        Case Else
            MsgBox "Allgemeiner Fehler: " & Err.Description
    End Select
End Sub

Praktische Beispiele

Hier sind einige praktische Beispiele, die die Verwendung von try catch-ähnlichen Strukturen in VBA demonstrieren:

  1. Netzwerkverbindung prüfen:

    Sub NetzwerkVerbindung()
       On Error GoTo FehlerHandler
       ' Versuche, eine Datei im Netzwerk zu öffnen
       Workbooks.Open Filename:="\\Netzwerkpfad\Datei.xlsx"
       Exit Sub
    
    FehlerHandler:
       MsgBox "Konnte die Datei nicht öffnen. Überprüfe die Netzwerkverbindung."
    End Sub
  2. Datenbankabfrage mit Fehlerbehandlung:

    Sub DatenbankAbfrage()
       On Error GoTo FehlerHandler
       ' Sample Datenbankabfrage
       ' Dein Code hier
       Exit Sub
    
    FehlerHandler:
       MsgBox "Datenbankfehler: " & Err.Description
    End Sub

Tipps für Profis

  • Verwende Resume-Anweisungen: Mit Resume Next kannst Du den Code ab der nächsten Zeile nach einem Fehler fortsetzen. Dies kann nützlich sein, um kleinere Fehler zu ignorieren.

  • Schreibe eine zentrale Fehlerbehandlung: Erstelle eine allgemeine Fehlerbehandlungsprozedur, die Du in verschiedenen Modulen aufrufen kannst, um den Code konsistent zu halten.

  • Nutze Err.Clear: Setze Err.Clear, um den Fehlerstatus zurückzusetzen, bevor Du eine neue Operation versuchst.


FAQ: Häufige Fragen

1. Was ist der Unterschied zwischen On Error Resume Next und On Error GoTo?
On Error Resume Next ignoriert den Fehler und fährt mit der nächsten Zeile fort, während On Error GoTo zu einem definierten Fehlerhandler springt.

2. Kann ich mehrere Fehlerhandler in einer Prozedur haben?
Ja, Du kannst mehrere Fehlerhandler mit verschiedenen On Error-Anweisungen implementieren, jedoch sollte jede Prozedur klar strukturiert sein, um Verwirrung zu vermeiden.

3. Wie kann ich Fehlernummern herausfinden?
Du kannst Debug.Print Err.Number verwenden, um die aktuelle Fehlernummer im Direktfenster anzuzeigen, wenn ein Fehler auftritt.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige