Điều này được giải thích kỹ trong sách hướng dẫn VB6 theo số Error Handling Hierarchy. On Error Goto 0
vô hiệu hóa trình xử lý lỗi trong thủ tục hiện tại, không phải trong quy trình được gọi là xử lý lỗi.
Nếu một lỗi xảy ra trong một thủ tục và thủ tục này không có một kích hoạt xử lý lỗi, Visual Basic tìm kiếm lạc hậu thông qua việc cấp phát thủ tục trong danh sách cuộc gọi - và thực thi xử lý lỗi kích hoạt đầu tiên nó tìm thấy. Nếu số điện thoại không gặp phải lỗi xử lý lỗi được kích hoạt ở bất kỳ đâu trong danh sách cuộc gọi, thì trình bày lỗi không mong muốn mặc định thư và tạm dừng thực thi.
Như những người khác đã nói, bạn có thể vào Tools-Tùy chọn Tổng tab và chọn Nghỉ giải lao trên tất cả các lỗi. Điều đó có hiệu quả vô hiệu hóa tất cả các báo cáo Lỗi của bạn - IDE sẽ phá vỡ ngay lập tức trên mọi lỗi.
Điều đó có thể gây khó chịu nếu mã VB6 của bạn ném lỗi như là một phần của hoạt động bình thường. Ví dụ: khi bạn kiểm tra xem tệp có tồn tại hay khi người dùng nhấn hủy trong cuộc đối thoại chung. Bạn không muốn IDE phá vỡ mọi lúc trên những dòng đó. Nhưng bạn có thể có các trình xử lý lỗi soạn sẵn trong tất cả các thủ tục xử lý sự kiện của bạn, để dừng chương trình gặp lỗi không mong muốn. Nhưng họ là một mối phiền toái khi bạn đang gỡ lỗi các vấn đề vì IDE không phá vỡ dòng với lỗi. Một mẹo là tắt các trình xử lý lỗi đó khi chạy trong IDE, nhưng giữ chúng trong tệp thực thi được xây dựng. Bạn làm như thế này
Thả các chức năng này vào mô-đun.
Public Function InIDE() As Boolean
Debug.Assert Not TestIDE(InIDE)
End Function
Private Function TestIDE(Test As Boolean) As Boolean
Test = True
End Function
Sau đó, bạn có thể viết trình xử lý lỗi như thế này.
Private Sub Form_Load()
If Not InIDE() Then On Error Goto PreventCrashes
<lots of code>
Exit Sub
PreventCrashes:
<report the error>
End Sub
Bị chèn ép từ here. Một mẹo khác - sử dụng phần bổ sung miễn phí MZTools để tự động thêm các trình xử lý lỗi soạn sẵn này.Đối với mã chất lượng sản xuất, bạn có thể tiến xa hơn và đặt trình xử lý lỗi trong mọi quy trình để tạo một ghetto stack trace. Bạn cũng có thể đăng nhập các lỗi ngay lập tức trong mọi trình xử lý lỗi.
EDIT: Ant đã chỉ ra chính xác rằng On Error Goto -1
là một VB.Net statement và không hợp lệ trong VB6.
EDIT: Arvo và OneNerd đã viết câu trả lời bằng một số cuộc thảo luận thú vị về mô phỏng Cuối cùng các khối ngăn trong xử lý lỗi VB6. Các cuộc thảo luận trong this question cũng đáng xem.
Không chính xác LarryF. Trên Error Goto 0 vô hiệu hóa trình xử lý lỗi trong chính thường trình, nhưng sau đó thời gian chạy sẽ xem lại ngăn xếp cuộc gọi cho bất kỳ trình xử lý lỗi hoạt động nào. Nếu có, nó sẽ xử lý lỗi. – MarkJ
Opps .. xấu của tôi. Tôi đã phải suy nghĩ của vbScript, mà sẽ cư xử như mô tả .. Hoặc, ít nhất là nó được sử dụng để. (Tôi không biết phiên bản mới nhất là gì, và nếu nó thậm chí còn thay đổi gần đây ..) – LarryF