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