AW: Problem mit "On Error GoTo ..."
05.11.2024 21:35:58
Yal
Hallo Lutz,
Du machst nichts falsches. Du versuchst nur "zu viel" zu machen. Es ist ratsam, immer nur einen "On Error" pro Sub zu haben (On Error gilt nur innerhalb des Subs oder Functions). Die Fehler-kritische Aktion können/sollten in separaten Subs abgelagert werden, wo dort nur eine Aktion vorgenommen wird.
Gern der Try-Catch-Finally Muster verwenden: Finally wird immer, auch nach eine Fehler, durchgelaufen. Es sollte daher minimale, nicht fehlerkritische Anweisung beinhalten. Die Name der Sprungmarken haben keine Bedeutung für den Compiler, man könnte genauso Tic, Tric & Trac verwenden. Try, Catch, Finally kommt von anderen Programmiersprache, wo es dort reservierte Wörte sind.
Sub b()
Application.EnableEvents = False
On Error GoTo Catch
Try: 'die Sprungmarke "Try" wird nie gerufen und ist daher nutzlos. Sie ist nur da, um den Muster Try-Catch-Finally vollständig zu machen.
Selection.PasteSpecial Paste:=xlPasteValues
GoTo Finally 'Bedingungslose Sprung, wenn keiner Fehler davor aufgetreten ist. Man überspringt damit "Catch"
Catch:
'hier wird was gemacht, was der Fehler behandelt. Minimalistisch bleiben.
Debug.Print "Err " & Err.Number & " in Sub b:" & Err.Description
'dann geht der Code weiter und macht die nächste Anweisungen
Finally:
Err.Clear 'Im Prinzip sollte immer den Fehler zurückgesetzt werden. VBA ist aber sehr tolerant
Application.EnableEvents = True
End Sub
VG
Yal