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

Forumthread: VBA: Bei Fehler Exit Sub

VBA: Bei Fehler Exit Sub
07.04.2017 10:55:41
Markus
Hallo,
ich verwende folgenden Code in Workbook_Open, um eine bestimmte Datei bzw. deren letztes Speicherdatum zu prüfen.
Der Code funktioniert soweit aber ich möchte gerne den Fall berücksichtigen, dass ein User keinen Zugriff auf das SourceFile bzw. dessen Pfad hat und in diesem Fall einen Fehler vermeiden.
Kann mir jemand sagen, was ich dafür hier ergänzen muss ?
Mein Code:
Private Sub Workbook_Open()
Dim UserReply As String
varSourceFolder = Worksheets(1).Range("SourceFolder").Value
varSourcePath = varSourceFolder & Worksheets(1).Range("SourceFile").Value
varSourceDate = FileDateTime(varSourcePath)
If Worksheets(1).Range("SourceDate").Value  varSourceDate Then
UserReply = MsgBox("Text ?", vbYesNo + vbExclamation, "Text")
If UserReply = vbNo Then
Exit Sub
Else
Call RefreshReport
End If
End If
End Sub
Vielen Dank im Voraus für Eure Hilfe,
Markus
Anzeige

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
evtl hilft: On Error Resume Next ... owT
07.04.2017 11:44:32
Matthias
AW: evtl hilft: On Error Resume Next ... owT
07.04.2017 11:51:51
Markus
Danke, Matthias.
Ich dachte an "On Error GoTo Handler: ...".
Macht das hier einen Unterschied ?
VG,
Markus
AW: evtl hilft: On Error Resume Next ... owT
07.04.2017 11:59:30
Matthias
Hallo
Dann muss aber die Fehlerbehandlung mit in den Code.
'Dein Code
Exit Sub
Handler:
msgbox "Es ist ein Fehler aufgetreten" 'oder ein anderer Text
end Sub
Gruß Matthias
Anzeige
AW: evtl hilft: On Error Resume Next ... owT
07.04.2017 12:45:45
Markus
Vielen Dank nochmal, Matthias !
Ich glaube, so ganz ist mein Problem damit noch nicht gelöst (oder ich verstehe es falsch).
Konkret möchte ich ja den File Not Found-Fehler (Error 53) abdecken, wobei der Pfad bei mir ja in der Datei festgelegt ist, d.h. wenn ein Fehler entsteht, dann erst bei der FileDateTime-Zeile, die ohne Zugriff zur entsprechenden Datei nicht berechnet werden kann.
Würde ich in diesem Fall On Error Resume Next vor diese Zeile setzen und danach On Error GoTo 0, d.h. On Error GoTo Handler wäre hier gar nicht nötig ?
Wie kann ich hier Fehler FileDateTime abdecken, also wenn dieses keine Zeit / Datum enthält ?
Sorry, wenn ich es nicht richtig formuliere. Mit Error Handling in VBA hatte ich bisher noch nicht viel zu tun.
VG,
Markus
Anzeige
AW: VBA: Bei Fehler Exit Sub
07.04.2017 13:03:37
Rudi
Hallo,
evtl. so?
Private Sub Workbook_Open()
Dim UserReply As String
Dim varSourceDate As Date
varSourceFolder = Worksheets(1).Range("SourceFolder").Value
varSourcePath = varSourceFolder & Worksheets(1).Range("SourceFile").Value
On Error Resume Next
varSourceDate = FileDateTime(varSourcePath)
On Error GoTo 0
If varSourceDate  0 Then
If Worksheets(1).Range("SourceDate").Value  varSourceDate Then
UserReply = MsgBox("Text ?", vbYesNo + vbExclamation, "Text")
If UserReply = vbNo Then
Exit Sub
Else
Call RefreshReport
End If
End If
End If
End Sub

Gruß
Rudi
Anzeige
AW: VBA: Bei Fehler Exit Sub
07.04.2017 13:31:27
Markus
Hallo Rudi,
das ist super - genau so hatte ich es mir vorgestellt !
Vielen Dank dafür. :)
VG und ein schönes WE,
Markus
AW: VBA: Bei Fehler Exit Sub
07.04.2017 14:08:58
Markus
Hallo Rudi,
das ist super - genau so hatte ich es mir vorgestellt !
Vielen Dank dafür. :)
VG und ein schönes WE,
Markus
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Fehlerbehandlung in VBA: Exit Sub bei Fehlern


Schritt-für-Schritt-Anleitung

Um Fehler in Deinem VBA-Code effizient zu handhaben und zu verhindern, dass das Programm bei einem Fehler abstürzt, kannst Du die On Error-Anweisung verwenden. Hier ist ein Beispiel, wie Du es in Deinem Workbook_Open-Event implementieren kannst:

Private Sub Workbook_Open()
    Dim UserReply As String
    Dim varSourceDate As Date
    varSourceFolder = Worksheets(1).Range("SourceFolder").Value
    varSourcePath = varSourceFolder & Worksheets(1).Range("SourceFile").Value

    On Error Resume Next
    varSourceDate = FileDateTime(varSourcePath)
    On Error GoTo 0

    If varSourceDate <> 0 Then
        If Worksheets(1).Range("SourceDate").Value <> varSourceDate Then
            UserReply = MsgBox("Text ?", vbYesNo + vbExclamation, "Text")
            If UserReply = vbNo Then
                Exit Sub
            Else
                Call RefreshReport
            End If
        End If
    End If
End Sub

In diesem Beispiel wird On Error Resume Next verwendet, um Fehler zu ignorieren, die möglicherweise durch den Zugriff auf eine nicht vorhandene Datei entstehen. Nach dem Abrufen des Dateidatums wird mit On Error GoTo 0 die Fehlerbehandlung zurückgesetzt.


Häufige Fehler und Lösungen

  1. Fehler beim Zugriff auf die Datei: Wenn der Dateipfad ungültig ist, kann es zu Fehlern kommen. Stelle sicher, dass der Pfad korrekt ist und die Datei existiert.

  2. Datei nicht gefunden (Error 53): Setze On Error Resume Next vor der Zeile, die den Fehler auslösen könnte (z.B. FileDateTime). Vergiss nicht, nach dieser Zeile die Fehlerbehandlung zurückzusetzen.

  3. Falsche Datentypen: Achte darauf, dass der Datentyp von varSourceDate korrekt ist. Verwende Date, um sicherzustellen, dass Du das richtige Format verwendest.


Alternative Methoden

Eine alternative Methode zur Fehlerbehandlung ist die Verwendung von On Error GoTo mit einem benannten Fehlerbehandlungsabschnitt. Hier ein Beispiel:

Private Sub Workbook_Open()
    On Error GoTo ErrorHandler
    ' Dein Code hier
    Exit Sub

ErrorHandler:
    MsgBox "Es ist ein Fehler aufgetreten"
End Sub

In diesem Fall wird der Code zum Fehlerbehandlungsabschnitt ErrorHandler geleitet, wenn ein Fehler auftritt.


Praktische Beispiele

Hier sind einige praktische Anwendungen der Fehlerbehandlung in Excel VBA:

  1. Datei überprüfen: Überprüfe, ob eine Datei existiert, bevor Du versuchst, darauf zuzugreifen.

    If Dir(varSourcePath) = "" Then
       MsgBox "Datei nicht gefunden."
       Exit Sub
    End If
  2. Zugriffsfehler vermeiden: Verwende On Error Resume Next, um sicherzustellen, dass Dein Code weiterläuft, auch wenn ein Fehler auftritt.


Tipps für Profis

  • Verwende On Error GoTo für komplexere Fehlerbehandlungen, insbesondere wenn Du spezifische Fehlernachrichten und Aktionen benötigst.
  • Dokumentiere Deine Fehlerbehandlungslogik, damit andere Entwickler verstehen, wie Fehler in Deinem Code behandelt werden.
  • Teste Deinen Code gründlich, um sicherzustellen, dass alle möglichen Fehlerfälle abgedeckt sind.

FAQ: Häufige Fragen

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

2. Wie kann ich spezifische Fehler behandeln? Du kannst spezifische Fehler mit einer Kombination aus On Error GoTo und einer Fehlerbehandlungsroutine abfangen, die verschiedene Fehlermeldungen anzeigt, je nach Art des Fehlers.

3. Muss ich On Error GoTo 0 verwenden? Ja, es ist wichtig, On Error GoTo 0 zu verwenden, um die Fehlerbehandlung zurückzusetzen, wenn Du keine weiteren Fehler ignorieren möchtest.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige