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

VBA führt On Error-Anweisung aus obwohl kein Fehler?

Forumthread: VBA führt On Error-Anweisung aus obwohl kein Fehler?

VBA führt On Error-Anweisung aus obwohl kein Fehler?
23.09.2024 10:19:03
Banditpredator
Hallo zusammen,

ich habe hier einen kleinen Code geschrieben, der einen Pfad aus einer Zelle ausliest (Variable "dateipfad") und dann eine entsprechende .pdf-Datei öffnet.

Kurioserweise springt VBA jedes Mal in die Zeile ErrorHandler, obwohl kein Fehler vorliegt. Habt ihr eine Ahnung?


Sub PDF_oeffnen()


On Error GoTo ErrorHandler


If Cells(5, 4).Value > 0 Then 'In dieser Zelle kommt der Dateiname der .pdf-Datei rein, siehe unten

ActiveSheet.Unprotect

Dim dateipfad As String
dateipfad = Cells(36, 8).Value 'Der Pfad zur PDF-Datei kann aus dieser Zelle entnommen werden

'MsgBox dateipfad

ActiveWorkbook.FollowHyperlink dateipfad

ActiveSheet.Protect

Else

MsgBox "Bitte erst den Namen die Datei auswählen, die geöffnet werden soll.", vbExclamation

Exit Sub

End If


ErrorHandler:
MsgBox "Gewünschte Datei ist nicht verfügbar!", vbExclamation
ActiveSheet.Protect
Exit Sub

End Sub
Anzeige

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

Betreff
Datum
Anwender
Anzeige
Schreibe es so...
23.09.2024 10:28:04
Case
Moin, :-)

... der Spur nach: ;-)

If Err.Number > 0 Then MsgBox "Gewünschte Datei ist nicht verfügbar!", vbExclamation


Servus
Case
AW: VBA führt On Error-Anweisung aus obwohl kein Fehler?
23.09.2024 10:33:01
ba
Kurz und knackig, hat funktioniert.

Danke dir :)
AW: VBA führt On Error-Anweisung aus obwohl kein Fehler?
23.09.2024 10:56:46
Yal
Hallo B,.

lass dein Code in Schritt-Modus (F8) laufen, und beobachte, was dabei passiert.

Kurz: wenn die erste Bedingung trifft, gibt es keine Exit Sub, daher geht es durch den ErrorHandler.
Es ist übrigens kein ErrorHandler ist, sondern eine Sprungmarke ohne reservierte VB-Syntax. Sie könnte genauso MargeSimpsons heissen.

Bin selber Fan vom "Try-Catch-Finally"-pattern:
Sub PDF_oeffnen()

Dim dateipfad As String

On Error GoTo Catch
Try:
If Cells(5, 4).Value = 0 Then Cells(5, 4).Value = InputBox("Bitte erst den Namen die Datei auswählen, die geöffnet werden soll.")

If Cells(5, 4).Value > 0 Then
ActiveSheet.Unprotect
dateipfad = Cells(36, 8).Value 'Der Pfad zur PDF-Datei kann aus dieser Zelle entnommen werden
ActiveWorkbook.FollowHyperlink dateipfad 'MsgBox dateipfad
ActiveSheet.Protect
End If
GoTo Finally 'keine Fehler -> aussteigen, aber sauber

Catch:
MsgBox "Gewünschte Datei ist nicht verfügbar!", vbExclamation
ActiveSheet.Protect

Finally:
'Alles, was unbedingt gemacht wird, auch nach einem Fehler...
End Sub

(Vermeide unnötigen Leerzeilen. Die Lesbarkeit wird damit nicht erhöht, ganz im Gegenteil. Je weniger desto "bedeutungsvoller")

VG
Yal
Anzeige
AW: VBA führt On Error-Anweisung aus obwohl kein Fehler?
23.09.2024 10:57:23
Onur
"Kurioserweise springt VBA jedes Mal in die Zeile ErrorHandler, obwohl kein Fehler vorliegt. Habt ihr eine Ahnung?" ???
Der Code macht nur das, was DU programmiert hast.
Der Code muss immer so aussehen, dass der Errorhandler nur dann abgearbeitet werden kann, wenn ein Fehler auftaucht - also im normalen Verlauf gar nicht erst "betreten" werden kann - was bei deinem Code nicht der Fall ist. Wenn die IF-Bedingung nicht zutrifft, wird die Sub zwar dank "EXIT SUB" korrekterweise verlassen, aber nicht, wenn sie zutrifft und landet prompt in der Zeile mit dem Errorhandler.
Das "EXIT SUB" gehört einfach hinter "End If".
Anzeige
AW: VBA führt On Error-Anweisung aus obwohl kein Fehler?
23.09.2024 11:23:21
daniel
HI
eine Sprungmarke ist nur dann relevant, wenn ein Sprungbefehl auf sie zeigt (das Goto Sprungmarke)
sollte der Code regulär an dieser Sprungmarke vorbeikommen, dann hat sie keinerlei Funktion, es wird einfach die nächste Zeile ausgeführt.
dh nach dem End If wird immer die Msgbox ausgegeben.

du hast in dem Code noch ein Exit Sub drin (das hast du vermutlich irgendwo gesehen.
dieses ist aber falsch platziert, an dieser Stelle direkt vor dem End Sub ist es ja komplett nutzlos, weil das Makro sowieso zu ende ist.
Verschiebe dieses Exit Sub mal vor die Sprungmarke.
Damit wird das Makro beendet, wenn es regulär diese Zeile ausführen muss.
Im Fehlerfall jedoch erfolgt der Sprung zu Sprungmarke und damit wird das Exit Sub übersprungen und nicht ausgeführt.



Sub PDF_oeffnen()

On Error GoTo ErrorHandler

If ...
...
End If

Exit Sub
ErrorHandler:
MsgBox "Gewünschte Datei ist nicht verfügbar!", vbExclamation
ActiveSheet.Protect
End Sub


ich bin allerdings kein Freund von solchen Errorhändlern.
Wenn eine mögliche Fehlerursache bekannt ist, ist es immer sinnvoller, hier gezielt die Bedingungen zu prüfen.
in deinem Fall tritt der Fehler auf, wenn die Datei, die per Hyperlink geöffnet werden soll, nicht vorhanden ist.
das kannst du aber mit der DIR-Funktion abfragen:

dateipfad = Cells(36, 8).Value 

if DIR(dateipfad) = "" Then
Msgbox "Datei nicht vorhanden"
else
ActiveWorkbook.FollowHyperlink dateipfad
End if


Gruß Daniel
Anzeige
AW: VBA führt On Error-Anweisung aus obwohl kein Fehler?
24.09.2024 15:45:31
Banditpredator
Danke an alle für eure Hilfe. Man lernt hier immer wieder etwas Neues dazu!

Beste Grüße

Dennis

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige