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:
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 –
To było to. Dziękuję Tim. – Lokerim