2013-02-09 34 views
7

Tôi đã sử dụng VBA trong Excel một lúc và tôi sử dụng trình xử lý lỗi tùy chỉnh cho tất cả các thủ tục của mình. Tôi thấy mình, lần đầu tiên, ở vị trí cần phải sử dụng Err.Raise (để đối phó với một tình huống Case Else trong một khối Select Case)., Và tôi không thể tìm ra cách vượt qua lỗi để xử lý lỗi tùy chỉnh. Thay vì truyền lỗi được nêu ra cho trình xử lý tùy chỉnh, VBA bật lên hộp thoại lỗi xấu xí và khá vô dụng của nó. Nếu bất cứ ai có thể cho tôi biết một cách để có được điều này tôi sẽ rất cảm kích.Làm thế nào để vượt qua một lỗi lớn lên đến một trình xử lý lỗi tùy chỉnh trong VBA?

Dưới đây là phiên bản chung của mã tôi đang sử dụng (chức năng/tên biến đã được thay đổi để bảo vệ người vô tội). Đối tượng gErrorHandler là một biến mô-đun lớp kích thước toàn cầu xử lý các lỗi từ bất kỳ và tất cả các thủ tục.

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 

Và đây là hộp thoại báo lỗi tôi nhận được thay vì có lỗi truyền cho handler tùy chỉnh:

enter image description here

+5

Làm việc cho tôi. Nó có thể là bạn có "phá vỡ tất cả các lỗi" thiết lập trong VBE dưới Tools >> tùy chọn >> tab chung –

+0

Đó là nó. Cảm ơn bạn Tim. – Lokerim

Trả lời

6

Như Tim đã chỉ ra trong bình luận của ông, câu trả lời là các VBA IDE là được định cấu hình để chia nhỏ tất cả các lỗi. Thay đổi nó để phá vỡ các lỗi chưa được xử lý chỉ cho tôi hành vi mà tôi mong muốn.

enter image description here

Các vấn đề liên quan