VBA Errorhandler

Hallo Leute,

kann mir jemand sagen, warum der ErrorHandler immer ausgeführt wird. die msgbox wird immer dargestellt.

CODE:
Private Sub print_leistungskatalog_Click()
On Error GoTo Errorhandler

Dim pwd As String

pwd = „basti07“
Sheets(„Leistungskatalog“).Unprotect pwd

Range(„B3:G4,B5:E348,F348,G4:G348“).Select
Selection.Interior.ColorIndex = xlNone

Range(„F5:F347“).Select
Selection.Interior.ColorIndex = xlNone

ActiveSheet.PageSetup.PrintArea = „$B$3:blush:G$348“
ActiveWindow.SelectedSheets.PrintOut Copies:=1

Range(„B3:G4,B5:E348,F348,G4:G348“).Select
Selection.Interior.ColorIndex = 36

Range(„F5:F347“).Select
Selection.Interior.ColorIndex = 3

Range(„A1“).Select

Errorhandler:
MsgBox „Es ist ein Fehler beim Drucken des Leistungskatalog aufgetreten“, vbCritical
Call colorBack
Sheets(„Leistungskatalog“).Protect pwd
End

End Sub

Für eure Hilfe bin ich sehr dankbar.

grüße,
Sebastian

kann mir jemand sagen, warum der ErrorHandler immer ausgeführt wird. die msgbox wird immer dargestellt.

Private Sub print\_leistungskatalog\_Click()
Dim pwd As String

 On Error GoTo Errorhandler

 pwd = "basti07"
 Sheets("Leistungskatalog").Unprotect pwd

 Range("B3:G4,B5:E348,F348,G4:G348").Interior.ColorIndex = xlNone

 Range("F5:F347").Interior.ColorIndex = xlNone

 ActiveSheet.PageSetup.PrintArea = "$B$3:blush:G$348"
 ActiveWindow.SelectedSheets.PrintOut Copies:=1

 Range("B3:G4,B5:E348,F348,G4:G348").Interior.ColorIndex = 36

 Range("F5:F347").Interior.ColorIndex = 3

 Range("A1").Select

 _'Hier muss natürlich ein Sprung ans Ende rein.  
 'VBA-Code wird Zeilenweise ausgeführt.  
 'Es wird also mit MsgBox fortgefahren.  
 'Wieso sollte VBA das, was hinter der "ErrorHandler"-Marke kommt, ignorieren?  
 'Und woher soll es wissen, wann dieser Breich zu Ende ist? Es könnte darunter ja noch Code kommen.  
 'Abhilfe:  
 'Noch eine Sprungmarke setzen und von hier aus da hinspringen:_  

 Goto Ende

Errorhandler:
 MsgBox "Es ist ein Fehler beim Drucken des Leistungskatalog aufgetreten", vbCritical
 Call colorBack
 Sheets("Leistungskatalog").Protect pwd
 End
Ende:
_'Hier passiert dann nichts mehr._
End Sub 'print\_leistungskatalog\_Click

Kristian

Achso, eins habe ich vergessen:

Du kannst, wie im Codebeispiel von mir geändert, auf die "Select"s verzichten. Die zweite Variante ist mit der ersten identisch:

Range("F5:F347").Select
Selection.Interior.ColorIndex = 3

Range("F5:F347").Interior.ColorIndex = 3

Das Selektieren der Zelle kostet nur Zeit und führt zu unruhigem Gerappel auf den Arbeitsblatt.

Kristian

Hallo Kristian!

'Hier muss natürlich ein Sprung ans Ende rein.
'VBA-Code wird Zeilenweise ausgeführt.
'Es wird also mit MsgBox fortgefahren.
'Wieso sollte VBA das, was hinter der „ErrorHandler“-Marke
kommt, ignorieren?
'Und woher soll es wissen, wann dieser Breich zu Ende ist? Es
könnte darunter ja noch Code kommen.
'Abhilfe:
'Noch eine Sprungmarke setzen und von hier aus da
hinspringen:

Goto Ende
Ende:

gut zu wissen und vielen dank für deine hilfe.

hat auf anhieb geklappt! :smile:

cu sebastian