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 mã VBA đã xác định. 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 '...' Mã này sẽ bị bỏ qua '... Kết thúc Sub 

Các ví dụ

Bạn có thể tải xuống Mẫu VBA Exit Sub Excel này tại đây - Mẫu VBA Exit Sub Excel

Ví dụ 1

Để có một 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 Cells (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ụ.

Đối với điều này, tôi sẽ phải thêm 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 bằng 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. Cứ 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 thử 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ỉ thoát khỏi 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 chúng ta 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 số 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': Phân chia theo số không.

Để 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 câu lệnh “On Error Goto ErrorHandler”. Ở đây từ ErrorHandler là nhãn tôi đã gán. Nếu bạn có thể thấy ở cuối mã, tôi đã đề cập đến nhãn là

ErrorHandler: Thoát Sub 

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

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

Như bạn có thể thấy trong ô C7, nó đã gặp lỗi là “Division by Zero” nên 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ụ.