ชุดคำสั่งหรือชุดรหัส VBA มาจากคำว่า Procedure ซึ่งชุดคำสั่งแต่ละชุดประกอบด้วยคำสั่งหลายบรรทัด แต่ละบรรทัดมีรหัส VBA เพื่อสั่งให้ Excel ทำงานทีละขั้น โดยทั่วไปเราควรแยกให้ชุดคำสั่งหนึ่งๆ ให้ใช้ควบคุมการทำงานที่เกี่ยวข้องกันชัดเจน
ชุดคำสั่ง VBA มี 2 ประเภท คือ
- Sub Procedure เป็นชุดคำสั่งทำหน้าที่ควบคุมการทำงานทั่วไปของ Excel
- Function Procedure เป็นชุดคำสั่งทำหน้าที่คำนวณคืนค่าผลลัพธ์ ใช้สำหรับสร้างสูตรใหม่มาใช้กับงานเฉพาะด้าน นอกเหนือจากสูตรสำเร็จรูปที่ Excel จัดเตรียมไว้ให้
ลักษณะโดยทั่วไปของชุดคำสั่งแต่ละชุด ถ้าเป็น Sub Procedure จะอยู่ในช่วงรหัสตั้งแต่ว่า Sub จนถึงคำว่า End Sub ส่วน Function Procedure ชุดหนึ่งๆ จะอยู่ในช่วงรหัสตั้งแต่ว่า Function จนถึงคำว่า End Function (ซึ่งชุดคำสั่งที่ Macro Recorder สร้างขึ้น จะเป็นชุดคำสั่งแบบ Sub Procedure เท่านั้น)
หมายเหตุ ยังมีชุดคำสั่งประเภท Class Procedure ซึ่งยากเกินกว่าจะนำมาอธิบายในที่นี้
โครงสร้างชุดคำสั่งแบบ Sub Procedure
Sub ชื่อชุดคำสั่ง()
'comment
รหัสคำสั่งแต่ละบรรทัด
รหัสคำสั่งแต่ละบรรทัด
รหัสคำสั่งแต่ละบรรทัด
End Sub
ลองเปรียบเทียบชุดคำสั่งที่ได้จาก Macro Recorder ที่ใช้เปลี่ยนขนาดตัวอักษรเป็น 20 pixel ดังนี้
Sub ChangeFontSize()
'
' ChangeFontSize Macro
' Macro recorded 14/2/2012 by Somkiat Foongkiat
'
' Keyboard Shortcut: Ctrl+q
'
With Selection.Font
.Name = "Tahoma"
.Size = 20
.Strikethrough = False
.Superscript = False
.Subscript = False
.OutlineFont = False
.Shadow = False
.Underline = xlUnderlineStyleNone
.ColorIndex = xlAutomatic
End With
End Sub
ส่วนที่ระบุว่าเป็นชุดคำสั่ง
Sub ChangeFontSize()
xxxxxxxxxxxxxxx
End Sub
คำว่า ChangeFontSize เป็นชื่อของชุดคำสั่งนี้ ต้องตามด้วยเครื่องหมาย () เสมอ
ส่วนที่เป็น Comment
'
' ChangeFontSize Macro
' Macro recorded 14/2/2012 by Somkiat Foongkiat
'
' Keyboard Shortcut: Ctrl+q
'
Comment เป็นบรรทัดที่ไม่ได้เกี่ยวข้องกับการทำงาน ใช้สำหรับบันทึกคำอธิบายสื่อสารกับมนุษย์ มักใช้เขียนคำอธิบายหน้าที่ของรหัส เพียงพิมพ์เครื่องหมายฝนทอง ' นำหน้า แล้วตามด้วยคำอธิบายที่ต้องการ
แทนที่จะลบรหัสทิ้ง เราสามารถสั่งให้รหัสบรรทัดนั้นไม่ทำงาน โดยพิมพ์เครื่องหมายฝนทองนำหน้าบรรทัดนั้น หรือถ้าต้องการสั่งหยุดรหัสบางส่วนในบรรทัดให้หยุดทำงาน ให้พิมพ์เครื่องหมายฝนทอง นำหน้าส่วนของรหัสที่ต้องการหยุดทำงาน โดย VBA จะถือว่าเมื่อพบเครื่องหมายฝนทอง จะแสดงว่า ตั้งแต่เครื่องหมายฝนทองนั้นไปจนสุดบรรทัด ถือเป็น Comment ไม่ต้องนำมาเกี่ยวข้องกับการทำงาน
ส่วนของรหัส VBA
With Selection.Font
.Name = "Tahoma"
.Size = 20
.Strikethrough = False
.Superscript = False
.Subscript = False
.OutlineFont = False
.Shadow = False
.Underline = xlUnderlineStyleNone
.ColorIndex = xlAutomatic
End With
สังเกตว่า ด้านซ้ายของรหัสจะถูกย่อหน้าไว้ เพื่อช่วยให้มนุษย์อ่านง่ายขึ้น และมีเครื่องหมายจุด . แทรกอยู่แทบทุกบรรทัด โดย VBA จะใช้เครื่องหมายจุดนี้ แบ่งรหัสออกเป็นส่วนใหญ่ตามด้วยส่วนย่อย จากซ้ายไปขวา เช่น Selection.Font มีความหมายว่า ในส่วนที่เลือกนั้น.ตัวอักษร
นอกจากนั้นสาเหตุที่มีคำว่า With (ซึ่งจบด้วยคำว่า End With) เป็นการช่วยให้รหัสลดความซ้ำซ้อนลง ทำให้ไม่จำเป็นต้องเขียนรหัสซ้ำๆกัน ในช่วงซ้ายมือของรหัสทุกบรรทัด ดังนี้
Selection.Font.Name = "Tahoma"
Selection.Font.Size = 20
.....
จะเห็นได้ว่า โครงสร้างรหัส VBA นั้น ใกล้เคียงกับภาษาที่คนเราใช้สื่อสารกันนั่นเอง แทนที่ต้องพูดสั่งกันซ้ำๆว่า
ในส่วนที่เลือกนั้น.ตัวอักษร.ชื่อตัวอักษร ทำให้เป็น Tahoma
ในส่วนที่เลือกนั้น.ตัวอักษร.ขนาดตัวอักษร ทำให้เป็น 20
สามารถสั่งแบบสั้นลงว่า ในส่วนที่เลือกนั้น.ตัวอักษร นั้น ให้ใช้ตัวอักษรใด ขนาดใด ซึ่งง่ายต่อการเขียน ประหยัดเวลา และยังทำให้รหัสทำงานเร็วขึ้นด้วย