VBA Thoát Sub - Thoát khỏi thủ tục phụ VBA nếu các điều kiện không được đáp ứng

Thủ tục phụ thoát VBA trong Excel

Exit Sub câu lệnh thoát khỏi quy trình con sớm hơn các dòng đã xác định của mã VBA. Tuy nhiên, để thoát khỏi quy trình con, chúng ta cần áp dụng một số loại kiểm tra logic.

Hãy xây dựng điều này trong các thuật ngữ đơn giản.

Sub MacroName () '…' Một số mã ở đây '… Thoát Sub' Thoát Sub mà không thực hiện thêm các dòng mã bên dưới '…' Đoạn mã này sẽ bị bỏ qua '… Kết thúc Sub

Ví dụ

Ví dụ 1

Để có ví dụ tốt hơn, hãy xem đoạn mã dưới đây.

Mã:

Sub Exit_Example1 () Dim k As Long For k = 1 To 10 Cell (k, 1) .Value = k Next k End Sub

Đoạn mã trên sẽ chèn các số sê-ri từ 1 đến 10 vào ô A1 đến A10.

Bây giờ tôi chỉ muốn chèn 5 số sê-ri và ngay sau khi giá trị của biến “k” trở thành 6, tôi muốn thoát khỏi phụ.

Tôi sẽ phải thêm bài kiểm tra logic trong excel là IF k = 6 Sau đó Thoát Sub .

Mã:

Sub Exit_Example1 () Dim k As Long For k = 1 To 10 If k = 6 then Exit Sub 'Ngay sau khi giá trị k trở thành 6, nó sẽ bỏ qua tất cả các mã và thoát khỏi Ô (k, 1). Giá trị = k Tiếp theo k Kết thúc Phụ

Bây giờ hãy chạy từng dòng mã. Nhấn phím F8 để bắt đầu quy trình.

Hiện tại, giá trị k là 0.

Để thay đổi giá trị k thành 1, nhấn phím F8 một lần nữa.

Vì vậy, giá trị k là 1, mã của chúng ta tiếp tục chạy và sẽ chèn 1 vào ô A1. Như vậy, tiếp tục chạy vòng lặp cho đến khi giá trị của k trở thành 6.

Bây giờ giá trị của k là 6 và dòng mã sắp thực hiện phép kiểm tra logic của chúng ta để thoát khỏi quy trình con. Nếu tôi nhấn phím F8 thêm một lần nữa, nó sẽ chỉ thực hiện toàn bộ quy trình phụ.

Như chúng ta có thể thấy, nó đã đánh dấu từ "Thoát Sub." Khi nhấn phím F8, nó sẽ thoát khỏi quy trình con mà không chuyển đến từ “End Sub”.

Ví dụ # 2 - Lỗi khi thoát khỏi quy trình con

Chúng ta cũng có thể thoát khỏi quy trình con khi nhận được các giá trị lỗi. Ví dụ, hãy xem xét dữ liệu dưới đây về phép chia số 1 cho số 2.

Dưới đây là mã để có được phép chia hai số.

Mã:

Sub Exit_Example2 () Dim k As Long For k = 2 to 9 Cells (k, 3) .Value = Cells (k, 1) .Value / Cells (k, 2) .Value Next k End Sub

Như chúng ta đã biết, chúng ta không thể chia bất kỳ số nào cho không. Vì vậy, nếu chúng tôi cố gắng làm điều đó, chúng tôi sẽ nhận được lỗi là Lỗi thời gian chạy '11': Division By Zero.

Để tránh điều này ngay khi chúng tôi gặp bất kỳ lỗi nào, tôi sẽ đề cập đến macro của mình để thoát khỏi quy trình con có hiệu lực ngay lập tức. Đoạn mã dưới đây là một trong những trường hợp như vậy.

Mã:

Sub Exit_Example2 () Dim k As Long For k = 2 to 9 On Error GoTo ErrorHandler Cells (k, 3) .Value = Cells (k, 1) .Value / Cells (k, 2) .Value Next k ErrorHandler: Exit Sub Kết thúc Sub

Trong ví dụ trên, tôi đã đề cập đến tuyên bố “On Error Goto ErrorHandler.” Ở đây từ ErrorHandler là nhãn tôi đã gán. Nếu bạn có thể nhìn thấy ở cuối mã, tôi đã đề cập đến thương hiệu là

ErrorHandler: Thoát Sub

Ngay sau khi mã gặp lỗi, nó sẽ đẩy mã để nhảy đến nhãn và nhãn hiệu có câu lệnh “Exit Sub” để nó thoát khỏi quy trình con.

Bây giờ tôi sẽ chạy mã; nó sẽ tính toán phép chia cho đến khi tìm thấy lỗi.

Như bạn có thể thấy trong ô C7, nó đã gặp lỗi là “Division by Zero”, vì vậy nó đã thoát khỏi quy trình con. Không thông báo cho người dùng thoát khỏi quy trình con luôn là một điều nguy hiểm. Để thông báo cho người dùng về lỗi, chúng tôi có thể bao gồm một hộp thông báo nhỏ.

Mã:

Sub Exit_Example2 () Dim k As Long For k = 2 to 9 On Error GoTo ErrorHandler Cells (k, 3) .Value = Cells (k, 1) .Value / Cells (k, 2) .Value Next k ErrorHandler: MsgBox " Đã xảy ra lỗi và lỗi là: "& vbNewLine & Err.Description Exit Sub End Sub

Đoạn mã trên sẽ hiển thị thông báo lỗi sau đó thoát khỏi quy trình con. Trong khi chạy mã nếu xảy ra lỗi sẽ hiện ra hộp thông báo trong VBA như bên dưới.

Đây là một cách đáng tin cậy hơn để thoát khỏi Thủ tục phụ.

thú vị bài viết...