VBA ออกจาก Sub | ออกจากกระบวนการย่อยของ VBA หากไม่ตรงตามเงื่อนไข

Excel VBA ออกจากขั้นตอนย่อย

คำสั่งExit Subออกจากกระบวนการย่อยก่อนหน้าบรรทัดที่กำหนดของรหัส VBA อย่างไรก็ตามในการออกจากขั้นตอนย่อยเราจำเป็นต้องใช้การทดสอบเชิงตรรกะบางประเภท

มาสร้างสิ่งนี้ในรูปแบบง่ายๆ

 Sub MacroName () '... ' โค้ดบางส่วนที่นี่ '... ออกจากซับ' ออกจากซับโดยไม่ต้องดำเนินการบรรทัดโค้ดเพิ่มเติมด้านล่าง '... ' โค้ดนี้จะถูกละเว้น '... 

ตัวอย่าง

คุณสามารถดาวน์โหลด VBA Exit Sub Excel Template ได้ที่นี่ - VBA Exit Sub Excel Template

ตัวอย่าง # 1

สำหรับตัวอย่างที่ดีขึ้นดูโค้ดด้านล่าง

รหัส:

 Sub Exit_Example1 () Dim k As Long สำหรับ k = 1 ถึง 10 Cells (k, 1) .Value = k ถัดไป k End Sub 

โค้ดด้านบนจะแทรกหมายเลขซีเรียลตั้งแต่ 1 ถึง 10 ในเซลล์ A1 ถึง A10

ตอนนี้ฉันต้องการแทรกเพียง 5 หมายเลขซีเรียลและทันทีที่ค่าของตัวแปร“ k” กลายเป็น 6 ฉันต้องการออกจากหน่วยย่อย

สำหรับวันนี้ผมจะต้องเพิ่มการทดสอบตรรกะใน Excel เป็นIF k = 6 แล้วออกจากต

รหัส:

 Sub Exit_Example1 () Dim k As Long For k = 1 To 10 If k = 6 Then Exit Sub 'ทันทีที่ค่า k กลายเป็น 6 จะละเว้นรหัสทั้งหมดและออกจาก Cells (k, 1) ค่า = k ถัดไป k End ย่อย 

ตอนนี้รันโค้ดทีละบรรทัด กดปุ่ม F8 เพื่อเริ่มการดำเนินการ

ณ ตอนนี้ค่า k เป็นศูนย์

หากต้องการเปลี่ยนค่า k เป็น 1 ให้กดปุ่ม F8 อีกครั้ง

ดังนั้นค่า k คือ 1 โค้ดของเราจะทำงานต่อไปและจะแทรก 1 ลงในเซลล์ A1 เช่นนี้ให้รันลูปไปเรื่อย ๆ จนกระทั่งค่า k กลายเป็น 6

ตอนนี้ค่าของ k คือ 6 และบรรทัดของโค้ดกำลังจะดำเนินการทดสอบตรรกะของเราเพื่อออกจากกระบวนการย่อย หากฉันกดแป้น F8 อีกครั้งหนึ่งจะเป็นการออกจากขั้นตอนย่อยทั้งหมดเท่านั้น

ในฐานะที่เราสามารถเห็นมันได้เน้นคำว่า“Exit Sub” เมื่อกดปุ่ม F8 มันจะออก subprocedure โดยไม่ต้องไปกับคำว่า“End Sub”

ตัวอย่าง # 2 - เมื่อเกิดข้อผิดพลาดออกจากกระบวนการย่อย

นอกจากนี้เรายังสามารถออกจากกระบวนการย่อยเมื่อเราได้รับค่าความผิดพลาด ตัวอย่างเช่นพิจารณาข้อมูลด้านล่างของการหารหมายเลข 1 จากหมายเลข 2

ด้านล่างนี้คือรหัสเพื่อรับการหารของตัวเลขสองตัว

รหัส:

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

ดังที่เราทราบดีว่าเราไม่สามารถหารจำนวนใด ๆ ด้วยศูนย์ได้ ดังนั้นหากเราพยายามทำเช่นนั้นเราจะได้รับข้อผิดพลาดเป็น Run Time Error '11': Division By Zero

เพื่อหลีกเลี่ยงปัญหานี้ทันทีที่เราพบข้อผิดพลาดใด ๆ ฉันจะพูดถึงมาโครของฉันเพื่อออกจากกระบวนการย่อยโดยมีผลทันที รหัสด้านล่างเป็นหนึ่งในกรณีดังกล่าว

รหัส:

 Sub Exit_Example2 () Dim k As Long For k = 2 ถึง 9 On Error GoTo ErrorHandler Cells (k, 3) .Value = Cells (k, 1) .Value / Cells (k, 2) .Value Next k ErrorHandler: Exit Sub End Sub 

ในตัวอย่างข้างต้นฉันได้กล่าวถึงคำสั่ง“ On Error Goto ErrorHandler” ที่นี่คำว่า ErrorHandler คือป้ายกำกับที่ฉันกำหนด หากคุณเห็นที่ด้านล่างของรหัสฉันได้กล่าวถึงป้ายกำกับว่า

ErrorHandler: ออกจาก Sub 

ดังนั้นทันทีที่โค้ดพบข้อผิดพลาดโค้ดจะกดข้ามไปที่ป้ายกำกับและป้ายกำกับมีคำสั่ง“ Exit Sub” ดังนั้นจะออกจากขั้นตอนย่อย

ตอนนี้ฉันจะรันโค้ดมันจะคำนวณการหารจนกว่าจะพบข้อผิดพลาด

ดังที่คุณเห็นในเซลล์ C7 พบข้อผิดพลาดเป็น“ หารด้วยศูนย์” ดังนั้นจึงออกจากกระบวนการย่อย การไม่แจ้งให้ผู้ใช้ออกจากขั้นตอนย่อยเป็นสิ่งที่อันตรายเสมอ เพื่อแจ้งให้ผู้ใช้ทราบเกี่ยวกับข้อผิดพลาดเราสามารถรวมกล่องข้อความขนาดเล็กหนึ่งกล่อง

รหัส:

 Sub Exit_Example2 () Dim k As Long For k = 2 ถึง 9 On Error GoTo ErrorHandler Cells (k, 3) .Value = Cells (k, 1) .Value / Cells (k, 2) .Value Next k ErrorHandler: MsgBox " ข้อผิดพลาดเกิดขึ้นและข้อผิดพลาดคือ: "& vbNewLine & Err.Description ออกจาก Sub End Sub 

รหัสด้านบนจะแสดงข้อความแสดงข้อผิดพลาดจากนั้นออกจากกระบวนการย่อย ในขณะที่รันโค้ดหากเกิดข้อผิดพลาดจะแสดงกล่องข้อความใน VBA ดังด้านล่าง

นี่เป็นวิธีที่เชื่อถือได้มากกว่าในการออกจาก Sub Procedure