2013-02-09 4 views
7

Ich habe VBA in Excel für eine Weile verwendet, und ich verwende einen benutzerdefinierten Fehlerhandler für alle meine Verfahren. Ich finde mich zum ersten Mal in der Position, Err.Raise zu verwenden (mit einer Case Else Situation in einem Select Case Block umzugehen), und ich kann nicht herausfinden, wie der Fehler an den benutzerdefinierten Fehlerhandler übergeben. Anstatt den erhöhten Fehler an den benutzerdefinierten Handler zu übergeben, öffnet VBA seinen eigenen hässlichen und ziemlich nutzlosen Fehlerdialog. Wenn mir jemand einen Weg geben könnte, dies zu umgehen, wäre ich sehr dankbar.Wie übergebe ich einen erhöhten Fehler an einen benutzerdefinierten Fehlerhandler in VBA?

Unten ist eine generische Version des Codes, den ich verwende (Funktion/Variablennamen wurden geändert, um die Unschuldigen zu schützen). Das gErrorHandler-Objekt ist eine global dimensionierte Klassenmodulvariable, die Fehler von allen Prozeduren behandelt.

Public Function MyFunction(dblInputParameter As Double) As Double 
On Error GoTo Err_MyFunction 

    Dim dblResult as Double 

    Select Case dblInputParameter 

     ...Several case statements go here... 

     Case Else 
      Err.Raise vbObjectError + 1000, "MyProjectName.MyObjectName", "Error Description" 

    End Select 

    MyFunction = dblResult 

Exit_MyFunction: 
    Exit Function 

Err_MyFunction: 
    gErrorHandler.DisplayError Err.Number, Err.Description, Erl, csModule, "basMyModuleName", "MyFunction" 
    Resume Exit_MyFunction 

End Function 

Und hier ist der Fehlerdialog ich stattdessen den Fehler an den benutzerdefinierten Handler übergeben zu haben:

enter image description here

+5

Funktioniert für mich. Es kann sein, dass Sie "Pause auf alle Fehler" in der VBE eingestellt haben unter Extras >> Optionen >> Registerkarte Allgemein –

+0

Das war es. Danke Tim. – Lokerim

Antwort

6

Als Tim in seinem Kommentar darauf hingewiesen, war die Antwort, dass die VBA IDE war konfiguriert, um alle Fehler zu beheben. Wenn ich es ändere um unbehandelte Fehler zu beheben, gab es nur das gewünschte Verhalten.

enter image description here

Verwandte Themen