AW: On Error Resume Next
25.06.2012 16:49:47
fcs
Hallo Ximena,
man kann das Ganze auch noch ein wenig ausschmücken.
Wenn du deine Subs die per Call aufgerufen werden in Funktions umbenennst, dann kannst bei Fehler in einer Sub-Task auch direkt die Hauptprozedur kontrolliert beenden, falls es Sinn macht.
Wenn Prozeduren lang und komplex sind, sollte man einen Kontrollvariable mitlaufen lassen, damit der Fehler ggf. besser eingegrenzt werden kann.
Schaut dann etwa wie folgt aus.
Das mindeste an Fehler-Prüfung wäre Case 0 (Alles OK) und Case Else mit Meldetext.
Gruß
Franz
Sub Hauptprozedur()
If fncTest1 = False Then GoTo Beenden
'If fncTest2 = False Then GoTo Beenden
Beenden:
'Hier wird aufgeräumt
With Application
.ScreenUpdating = True
.EnableEvents = True
'etc. pp
End With
End Sub
Function fncTest1() As Boolean
Dim intFehler As Integer, strMsgTitel As String, strMsgTxt As String
Dim wks As Worksheet
On Error GoTo Fehler
fncTest1 = True
'Abschnitt 1
intFehler = 1
'Code ...
Set wks = ActiveWorkbook.Worksheets(2)
With wks
End With
'Abschnitt 2
intFehler = 2
'Code ...
'usw.
Fehler:
With Err
strMsgTitel = "Fehler - Makro: fncTest1"
strMsgTxt = "Fehler-Nr.: " & .Number & vbLf & .Description & vbLf _
& "intFehler: " & intFehler
Select Case .Number
Case 0 'alles ist OK
Case 9 'index außerhalb gültiger Bereich
Select Case intFehler
Case 1
fncTest1 = False
strMsgTxt = strMsgTxt & vbLf & "2. Tabellenblatt ist in aktiver Datei """ _
& ActiveWorkbook.Name & """ noch nicht vorhanden!"
MsgBox strMsgTxt, vbInformation + vbOKOnly, strMsgTitel
Case Else
Resume Next
End Select
Case Else
fncTest1 = False
MsgBox strMsgTxt, vbInformation + vbOKOnly, strMsgTitel
End Select
End With
End Function