รูทีนย่อย Excel VBA: วิธีเรียกย่อยใน VBA พร้อมตัวอย่าง
⚡ สรุปอย่างชาญฉลาด
ซับรูทีน VBA ใน Excel คือกลุ่มของโค้ดที่ทำงานโดยไม่ส่งค่ากลับ หน้านี้จะกล่าวถึงกฎการตั้งชื่อ ไวยากรณ์ของซับ การเรียกใช้ซับจากปุ่มคำสั่ง และความแตกต่างระหว่างซับกับฟังก์ชัน

รูทีนย่อยใน VBA คืออะไร?
A รูทีนย่อยใน VBA คือส่วนของโค้ดที่ทำงานเฉพาะที่อธิบายไว้ในโค้ด แต่ไม่ส่งคืนผลลัพธ์หรือค่า รูทีนย่อยใช้เพื่อแบ่งโค้ดขนาดใหญ่ออกเป็นส่วนเล็กๆ ที่สามารถจัดการได้ รูทีนย่อยสามารถเรียกคืนได้หลายครั้งจากทุกที่ในโปรแกรม
สมมติว่าคุณได้สร้างอินเทอร์เฟซผู้ใช้พร้อมกล่องข้อความสำหรับรับข้อมูลอินพุตของผู้ใช้ คุณสามารถสร้างซับรูทีนที่ล้างเนื้อหาของกล่องข้อความ ซับรูทีนการเรียก VBA เหมาะสมในสถานการณ์ดังกล่าว เนื่องจากคุณไม่ต้องการส่งคืนผลลัพธ์ใดๆ
ทำไมต้องใช้รูทีนย่อย
- แบ่งโค้ดเป็นโค้ดขนาดเล็กที่สามารถจัดการได้:โปรแกรมคอมพิวเตอร์ทั่วไปมีโค้ดต้นฉบับจำนวนหลายพันบรรทัด ซึ่งทำให้มีความซับซ้อน ซับรูทีนช่วยแก้ปัญหานี้โดยแบ่งโปรแกรมออกเป็นโค้ดย่อยๆ ที่จัดการได้
- Code การนำกลับมาใช้ใหม่สมมติว่าคุณมีโปรแกรมที่ต้องเข้าถึงฐานข้อมูล หน้าต่างเกือบทั้งหมดในโปรแกรมจะต้องโต้ตอบกับฐานข้อมูล แทนที่จะเขียนโค้ดแยกกันสำหรับหน้าต่างเหล่านี้ คุณสามารถสร้างฟังก์ชันที่จัดการการโต้ตอบกับฐานข้อมูลทั้งหมด จากนั้นคุณก็สามารถเรียกใช้จากหน้าต่างใดก็ได้ที่คุณต้องการ
- รูทีนย่อยและฟังก์ชันมีการจัดทำเอกสารด้วยตนเอง- สมมติว่าคุณมีฟังก์ชันการคำนวณ LoanInterest และอีกฟังก์ชันหนึ่งที่ระบุว่า ConnectToDatabase เพียงแค่ดูชื่อของรูทีนย่อย/ฟังก์ชัน โปรแกรมเมอร์ก็จะสามารถบอกได้ว่าโปรแกรมทำอะไร
ก่อนที่จะเขียนชื่อไฟล์ คอมไพเลอร์จะคาดหวังว่าชื่อไฟล์นั้นจะต้องเป็นไปตามกฎเกณฑ์สั้นๆ ชุดหนึ่ง
กฎการตั้งชื่อรูทีนย่อยและฟังก์ชัน
หากต้องการใช้รูทีนย่อยและฟังก์ชัน มีชุดกฎที่ต้องปฏิบัติตาม
- ชื่อฟังก์ชันการเรียกรูทีนย่อยหรือ VBA ไม่สามารถมีช่องว่างได้
- ชื่อย่อยหรือฟังก์ชัน Excel VBA Call ควรขึ้นต้นด้วยตัวอักษรหรือขีดล่าง ไม่สามารถขึ้นต้นด้วยตัวเลขหรืออักขระพิเศษได้
- รูทีนย่อยหรือชื่อฟังก์ชันไม่สามารถเป็นคีย์เวิร์ดได้ คำสำคัญคือคำที่มีความหมายพิเศษ VBA- คำต่างๆ เช่น Private, Sub, Function และ End ฯลฯ ล้วนเป็นตัวอย่างของคีย์เวิร์ด คอมไพเลอร์ใช้สำหรับงานเฉพาะ
เมื่อเลือกชื่อที่ถูกต้องแล้ว การประกาศนั้นก็จะปฏิบัติตามรูปแบบที่กำหนดไว้
ไวยากรณ์รูทีนย่อย VBA
คุณจะต้องเปิดใช้งานแท็บนักพัฒนาซอฟต์แวร์ใน Excel เพื่อติดตามตัวอย่างนี้ หากคุณไม่ทราบวิธีเปิดใช้งานแท็บนักพัฒนาซอฟต์แวร์ ให้อ่านบทช่วยสอนใน การควบคุม VBA ใน Excel
ที่นี่ในไวยากรณ์
Private Sub mySubRoutine(ByVal arg1 As String, ByVal arg2 As String) 'do something End Sub
คำอธิบายไวยากรณ์
| Code | การกระทำ |
|---|---|
|
|
|
|
|
|
ซับรูทีนต่อไปนี้ยอมรับชื่อและนามสกุลและแสดงในกล่องข้อความ
ตอนนี้เราจะเขียนโปรแกรมและดำเนินการขั้นตอนย่อยนี้ มาดูสิ่งนี้กัน
วิธีเรียก Sub ใน VBA
ด้านล่างนี้เป็นกระบวนการทีละขั้นตอนเกี่ยวกับวิธีการโทร Sub ใน VBA:
- ออกแบบอินเทอร์เฟซผู้ใช้และตั้งค่าคุณสมบัติสำหรับการควบคุมผู้ใช้
- เพิ่มรูทีนย่อย
- เขียนโค้ดเหตุการณ์การคลิกสำหรับปุ่มคำสั่งที่เรียกรูทีนย่อย
- ทดสอบการใช้งาน
ขั้นตอน 1) ส่วนติดต่อผู้ใช้
ออกแบบส่วนติดต่อผู้ใช้ตามที่แสดงในภาพด้านล่าง
ตั้งค่าคุณสมบัติต่อไปนี้ คุณสมบัติที่เรากำลังตั้งค่า:
| S / N | Control | อสังหาริมทรัพย์ | ความคุ้มค่า |
|---|---|---|---|
| 1 | ปุ่มคำสั่ง1 | ชื่อ | btnDisplayFullName |
| 2 | คำบรรยายภาพ | รูทีนย่อยชื่อเต็ม |
อินเทอร์เฟซของคุณควรมีลักษณะดังนี้
ขั้นตอน 2) เพิ่มรูทีนย่อย
- กด Alt + F11 เพื่อเปิดหน้าต่างโค้ด
- เพิ่มซับรูทีนต่อไปนี้
Private Sub displayFullName(ByVal firstName As String, ByVal lastName As String) MsgBox firstName & " " & lastName End Sub
ที่นี่ในรหัส
| Code | สถานะ |
|---|---|
|
|
|
|
|
|
ขั้นตอน 3) การเรียกรูทีนย่อย
การเรียกรูทีนย่อยจากเหตุการณ์คลิกปุ่มคำสั่ง
- คลิกขวาที่ปุ่มคำสั่งตามที่แสดงในภาพด้านล่าง เลือก "ดู" Code.
- ตัวแก้ไขโค้ดจะเปิดขึ้น
เพิ่มโค้ดต่อไปนี้ในตัวแก้ไขโค้ดสำหรับเหตุการณ์คลิกของปุ่มคำสั่ง btnDisplayFullName
Private Sub btnDisplayFullName_Click() displayFullName "John", "Doe" End Sub
หน้าต่างโค้ดของคุณควรมีลักษณะดังนี้
บันทึกการเปลี่ยนแปลงและปิดหน้าต่างโค้ด
ขั้นตอน 4) การทดสอบรหัส
บนแถบเครื่องมือของนักพัฒนาให้ปิดโหมดการออกแบบ 'ปิด' ดังที่แสดงด้านล่าง
ขั้นตอน 5) คลิกที่ปุ่มคำสั่ง 'FullName Subroutine'
คุณจะได้รับผลลัพธ์ดังต่อไปนี้
การกดปุ่มนั้นสะดวกก็จริง แต่ไม่ใช่เพียงวิธีเดียวในการเริ่มใช้งานซับรูทีน และในระหว่างการพัฒนานั้น แทบจะไม่ใช่วิธีที่เร็วที่สุดเลย
วิธีเรียกใช้ซับรูทีนโดยไม่ต้องใช้ปุ่ม
ในขณะที่คุณกำลังเขียนโค้ด การเพิ่มคอนโทรลลงในชีตเพื่อทดสอบซับรูทีนนั้นเป็นการเสียเวลา VBA มีวิธีอื่นอีกสี่วิธีในการเรียกใช้ซับรูทีน และแต่ละวิธีเหมาะสมกับช่วงเวลาที่แตกต่างกันในวงจรการพัฒนา
- กดปุ่ม F5 ในโปรแกรมแก้ไขข้อความ: วางเคอร์เซอร์ไว้ที่ใดก็ได้ภายใน Sub แล้วกด F5 โปรแกรมจะทำงานทันที วิธีนี้ใช้ได้เฉพาะเมื่อ Sub ไม่รับอาร์กิวเมนต์ใดๆ เนื่องจาก VBA ไม่มีค่าให้ป้อน
- ทำตามขั้นตอนด้วยปุ่ม F8: รันโค้ดแบบเดียวกันทีละบรรทัด เพื่อให้คุณสามารถดูการเปลี่ยนแปลงของแต่ละตัวแปรในหน้าต่าง Locals ได้ ใช้ฟังก์ชันนี้เมื่อผลลัพธ์ผิดพลาดและคุณต้องการทราบว่าข้อผิดพลาดอยู่ที่จุดใด
- ใช้กล่องโต้ตอบมาโคร: ในแท็บนักพัฒนา ให้คลิก มาโคร เลือกชื่อ แล้วคลิก เรียกใช้ เฉพาะซับรูทีนสาธารณะที่ไม่มีอาร์กิวเมนต์เท่านั้นที่จะปรากฏในรายการนี้ ซึ่งเป็นเหตุผลว่าทำไมซับรูทีนตัวช่วยจึงมักถูกประกาศเป็นส่วนตัว
- โทรมาจากซับอื่น: นี่คือวิธีการที่ใช้สำหรับ Sub ทุกตัวที่รับอาร์กิวเมนต์ และเป็นวิธีที่ปุ่มคำสั่งด้านบนใช้เช่นกัน
ตัวเลือกสุดท้ายมีรูปแบบที่ยอมรับได้สองแบบ การเขียนชื่อตามด้วยอาร์กิวเมนต์เปล่าๆ ก็ใช้ได้ และการใช้คีย์เวิร์ด Call อย่างชัดเจนก็ใช้ได้เช่นกัน แต่กฎการใช้เครื่องหมายวงเล็บจะแตกต่างกันระหว่างสองวิธีนี้
Sub RunTheGreeting() ' Form 1: no Call keyword, no brackets displayFullName "John", "Doe" ' Form 2: Call keyword, brackets required Call displayFullName("Jane", "Roe") End Sub
ทั้งสองบรรทัดทำหน้าที่เหมือนกันทุกประการ การผสมผสานรูปแบบทั้งสองโดยการเขียนวงเล็บโดยไม่ใช้คำหลัก Call เป็นสาเหตุที่พบบ่อยที่สุดของข้อผิดพลาดในการคอมไพล์ “Expected: =” เมื่อ Sub รับอาร์กิวเมนต์มากกว่าหนึ่งตัว
ความแตกต่างระหว่าง Sub และ Function ใน VBA
Sub และ Function เป็นประเภทของฟังก์ชันสองประเภทใน VBA และผู้เริ่มต้นมักเลือกใช้ผิดประเภท คำถามสำคัญคือ: โค้ดที่เรียกใช้ฟังก์ชันนั้นต้องการค่าส่งกลับหรือไม่?
| คุณสมบัติ (Feature) | ต | ฟังก์ชัน |
|---|---|---|
| ส่งคืนค่า | ไม่ | ใช่ กำหนดให้กับชื่อฟังก์ชัน |
| ประกาศด้วย | ย่อย … สิ้นสุด ย่อย | ฟังก์ชัน … สิ้นสุดฟังก์ชัน |
| เรียกว่า | แถลงการณ์ในบรรทัดของตัวเอง | ส่วนหนึ่งของนิพจน์ เช่น x = myFunc(2) |
| สามารถใช้งานได้ในเซลล์ของเวิร์กชีต | ไม่ | ใช่ ในฐานะฟังก์ชันที่ผู้ใช้กำหนดเอง |
| การใช้งานทั่วไป | จัดรูปแบบแผ่นงาน ล้างข้อมูลที่ป้อน แสดงข้อความ | คำนวณผลรวม แปลงค่า ค้นหาข้อมูล |
ใช้ Sub เมื่อโค้ดทำงานกับเวิร์กบุ๊ก และ... ฟังก์ชัน VBA เมื่อโค้ดสร้างคำตอบที่สิ่งอื่นนำไปใช้






