2013-02-09 4 views
7

Używam VBA w programie Excel od jakiegoś czasu i używam niestandardowej procedury obsługi błędów dla wszystkich moich procedur. Po raz pierwszy znajduję się w sytuacji, w której potrzebuję użyć Err.Raise (aby poradzić sobie z sytuacją Case Else w bloku Select Case), i nie mogę się dowiedzieć, jak przekazać błąd do niestandardowej procedury obsługi błędów. Zamiast przekazywać podniesiony błąd do niestandardowego programu obsługi, VBA wyświetla własne brzydkie i dość bezużyteczne okno dialogowe błędu. Jeśli ktokolwiek może mi powiedzieć, jak sobie z tym poradzić, byłbym bardzo wdzięczny.Jak przekazać podniesiony błąd do niestandardowej procedury obsługi błędów w VBA?

Poniżej znajduje się uogólniona wersja kodu, którego używam (nazwy funkcji/zmiennych zostały zmienione, aby chronić niewinnych). Obiekt gErrorHandler jest globalnie zwymiarowaną zmienną modułu klasy, która obsługuje błędy z dowolnej procedury.

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 

A oto dialog błąd pojawia się zamiast błędu przekazany do obsługi niestandardowych:

enter image description here

+5

Działa u mnie. Możliwe, że masz "przełamanie wszystkich błędów" ustawione w VBE w menu Narzędzia >> opcje >> zakładka główna –

+0

To było to. Dziękuję Tim. – Lokerim

Odpowiedz

6

Jak Tim wskazał w swoim komentarzu, odpowiedź była, że ​​VBA IDE było skonfigurowany tak, aby łamać wszystkie błędy. Zmiana na złamanie nieobsługiwanych błędów dała mi tylko pożądane zachowanie.

enter image description here

Powiązane problemy