Font s :
Background :

โครงสร้างชุดคำสั่ง VBA

ชุดคำสั่งหรือชุดรหัส VBA มาจากคำว่า Procedure ซึ่งชุดคำสั่งแต่ละชุดประกอบด้วยคำสั่งหลายบรรทัด แต่ละบรรทัดมีรหัส VBA เพื่อสั่งให้ Excel ทำงานทีละขั้น โดยทั่วไปเราควรแยกให้ชุดคำสั่งหนึ่งๆ ให้ใช้ควบคุมการทำงานที่เกี่ยวข้องกันชัดเจน

ชุดคำสั่ง VBA มี 2 ประเภท คือ

  1. Sub Procedure เป็นชุดคำสั่งทำหน้าที่ควบคุมการทำงานทั่วไปของ Excel
  2. 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 28/10/2006 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 28/10/2006 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

สามารถสั่งแบบสั้นลงว่า ในส่วนที่เลือกนั้น.ตัวอักษร นั้น ให้ใช้ตัวอักษรใด ขนาดใด ซึ่งง่ายต่อการเขียน ประหยัดเวลา และยังทำให้รหัสทำงานเร็วขึ้นด้วย

ข้อควรสังเกตและข้อควรระวังในการเขียนรหัส VBA

VBE

  1. หากเมื่อกดปุ่ม ALT+F11 เพื่อเปิด VBE ขึ้นมาแล้ว ไม่มีจอ Window ภายในแบ่งเป็นส่วนๆ ให้ใช้เมนูของ VBE สั่ง View > Project Explorer และ View > Properties Window เพื่อแบ่งจอด้ายซ้ายให้แสดงชื่อแฟ้มและโครงสร้างของแฟ้ม ปรากฏให้เห็นใน Project Explorer (ส่วน Properties Window นั้น ไม่จำเป็นต้องเปิดขึ้นก็ได้)
  2. ให้สั่งปรับระบบภาษาที่ใช้ให้เป็นภาษาไทย ในเมนูของ VBE ให้สั่ง Tools > Options > Editor Format > Font เลือก Font ไทย (แนะนำ Tahoma Bold(Thai))
  3. ชุดคำสั่งที่ใช้งานทั่วไป ให้เขียนเก็บไว้ในชีทชื่อ Module1, Module2, Module3 ...โดยใช้เมนู Insert > Module ใน VBE จะช่วยสร้าง Module โดยเรียงเลขต่อท้ายให้เรื่อยไป
  4. ให้สังเกตว่า ในหน้าจอส่วนของ Project Explorer เมื่อดับเบิลคลิกที่ื่ชื่อ Module1 จะมีสีพื้นใต้ชื่อเป็นสีเทาจาง พร้อมกันนั้นจอด้านขวาจะเปิด Code Window เป็นพื้นที่ใช้เก็บรหัสเปิดขึ้นมาให้เห็น และด้านบนซ้ายของจอ จะแสดงชื่อแฟ้มต่อด้วยชื่อ Module เช่น Book1.xls [Module1(Code)] ทั้งนี้เพื่อแสดงให้เห็นชัดว่า Code Window ที่กำลังใช้งานนั้นเป็นของ Module1 ชัดเจน (อย่าดูแค่สีใต้ชื่อ Module1 เพราะถ้าลองคลิกที่ชื่อ Module1 จะเปลี่ยนสีพื้นเป็นสีเข้ม ซึ่งต้องดับเบิลคลิกจึงจะเป็นสีเทาจาง)
  5. ในขั้นต้นที่ยังเพิ่งเริ่มเรียนรู้ VBA นั้น ให้ตรวจสอบ VBE ว่า Tools > Options > Editor ไม่ได้กาช่อง Require Variable Declaration (หากพบว่าเดิมกาไว้ ให้ตัดกาทิ้งไป ซึ่งคำสั่งนี้ถ้ากาไว้ จะทำให้ทุกครั้งที่ Insert > Module ใหม่ จะมีคำสั่ง Option Explicit เขียนไว้ในบรรทัดแรก ดังนั้นถ้าพบคำว่า Option Explicit ก็ให้ลบทิ้งบรรทัดนี้ออกไปด้วย)
  6. ควรแยกเก็บชุดคำสั่งที่ทำงานต่างกันโดยสิ้นเชิง ไว้ต่าง Module กัน
  7. หากใช้ Macro Recorder ช่วยสร้างรหัส ควรบันทึกขั้นตอนสั้นๆแยกออกจากกันในแต่ละครั้ง เพื่อทำให้เกิด Sub Procedure แยกเก็บรหัสแต่ละชุดออกจากกัน ซึ่งทุกครั้งที่เปิดแฟ้มขึ้นมาบันทึก Macro ใหม่ จะพบว่า VBE เปิด Module ใหม่แยกจาก Module เดิมเสมอ
  8. ถ้าต้องการกำหนด Shortcut Key ให้กับชุดคำสั่งที่เขียนเอง หรือเปลี่ยนแปลง Shortcut Key ชุดคำสั่งที่ใช้ Macro Recorder ให้กลับที่ Excel แล้วสั่ง Tools > Macro > Macros > คลิกเลือกชื่อชุดคำสั่ง แล้วกดปุ่ม Options... จะเห็นช่องที่พิมพ์ Shotcut Key ลงไปได้ (สังเกตว่า Shortcut Key ที่เขียนไว้ในส่วนของ Comment อาจไม่ตรงกับ Shortcut Key ที่แก้ไขใหม่ก็ได้ เพราะ VBE ไม่ได้ตามแก้สิ่งที่บันทึกเดิมไปแล้ว)
  9. ให้พิมพ์ตัวอักษรตัวเล็กเสมอ เว้นเฉพาะชื่อ Sub หรือชื่อตัวแปรที่คุณตั้งเองให้พิมพ์ตัวเล็กผสมตัวใหญ่ตามต้องการ เมื่อกด Enter หรือขึ้นบรรทัดใหม่จะพบว่า VBE ช่วยแก้ไขตัวอักษรตัวเล็กที่คุณพิมพ์ หากเป็นคำสั่งที่ VBE รู้จัก จะถูกแก้ให้เป็นตัวอักษรตัวใหญ่ผสมตัวเล็กต่อให้เอง แต่ถ้าเป็นคำที่สะกดผิดหรือ VBE ไม่รู้จัก ให้สังเกตว่าจะยังคงเป็นตัวเล็กตามเดิม
  10. เมื่อพิมพ์คำว่า Sub ตามด้วยชื่อของ Sub นั้นแล้วกดปุ่ม Enter จะพบว่า VBE จะพิมพ์เครื่องหมาย () ต่อท้ายชื่อ Sub ให้เอง และเกิดคำว่า End Sub พิมพ์ในบรรทัดต่อไปเพื่อแสดงให้เห็นจุดสิ้นสุดของ Sub
  11. VBE จะย้อนไปแก้ไขชื่อตัวแปรที่สะกดตรงกันให้เป็นตัวใหญ่ตัวเล็ก ตามชื่อตัวแปรตัวล่าสุดที่พิมพ์ลงไปให้เสมอ เช่น เดิมใช้ชื่อตัวแปร myVar แต่ต่อมาคุณพิมพ์ MYVar จะพบว่า VBE แก้ไข myVar เดิมทุกตัวให้เป็น MYVar
  12. ควรจัดย่อหน้ารหัส VBA ในชุดคำสั่งให้ย่อหน้าลดหลั่นกันไป เพื่อใช้แนวย่อหน้าที่ตรงกัน แสดงถึงคำสั่งระดับเดียวกัน
  13. ถ้ารหัสแต่ละบรรทัดยาวมาก สามารถจัดรหัสขึ้นบรรทัดใหม่ได้ โดยเคาะวรรคแล้วพิมพ์เครื่องหมาย _ แล้วกดปุ่ม Enter เพื่อพิมพ์ต่อในบรรทัดใหม่
  14. ใน VBE จะจดจำทุกขั้นตอนเดิมที่คุณทำไว้ตลอด ช่วยให้สามารถ Undo หรือกดปุ่ม Ctrl+z เพื่อย้อนกลับไปใช้รหัสเดิมที่เขียนไว้ได้ทุกขั้นที่ผ่านไปแล้ว
  15. ควรสั่ง Save ก่อนที่จะสั่ง Run รหัสเสมอ เพราะหากรหัสไม่ทำงาน ในบางครั้งอาจทำให้เครื่อง Hang และไม่สามารถสั่ง Save เก็บรหัสที่อุตส่าห์เสียแรงเสียเวลาสร้างเก็บไว้ได้
  16. สั่งรหัสให้ทำงาน โดยคลิกในพื้นที่ระหว่าง Sub ถึง End Sub ของชุดคำสั่งที่ต้องการ แล้วกดปุ่ม F5 หรือ ใช้เมนู Run > Run Sub หรือคลิกที่ปุ่ม Run (เป็นรูปลูกศรขวา) หากต้องการให้รหัสทำงานทีละบรรทัด ให้กดปุ่ม F8 ต่อกันไปเรื่อยๆ
  17. ถ้าต้องการสั่งรหัสให้ทำงานโดยสั่งจาก Excel ให้ใช้คำสั่งบนเมนู Tools > Macro > Macros จากนั้นคลิกเลือกชื่อชุดคำสั่งที่ต้องการ แล้วกดปุ่ม Run เพื่อสั่งให้ทำงานต่อเนื่องกันทั้งชุด หรือกดปุ่ม Step Into เพื่อสั่งให้ทำงานทีละบรรทัด (ซึ่งต้องกดปุ่ม F8 ต่อไปเอง)
  18. ในกรณีีรหัสหยุดทำงานทั้งๆที่รหัสยังทำงานไม่ครบทั้งชุดคำสั่ง จะเห็นว่า VBE เปลี่ยนสีพื้นบรรทัดของรหัสที่ไม่ทำงานเป็นพื้นสีเหลือง และจะทำให้ทั้ง VBE และ Excel หยุดค้างตามไปด้วย ให้สั่ง Run > Reset หรือคลิกที่ปุ่ม Reset (เป็นรูปสี่เหลี่ยมจตุรัส อยู่ติดกับปุ่ม Run) ก่อน พื้นสีเหลืองจะหายไป จากนั้นจึงจะสามารถกลับไปตรวจสอบแก้ไขรหัสต่อไป
  19. เมื่อทดสอบรหัสทั้งหมดว่าทำงานถูกต้องสมบูรณ์แล้ว ควร Export Module ออกไปแล้ว Remove Module ตามไปด้วย จากนั้นสั่ง Save แล้วเปิดแฟ้มขึ้นมาใหม่ แล้วจึง Import Module กลับเข้ามาเหมือนเดิม ทั้งนี้เพื่อช่วยลบขยะที่ตัว Module เก็บไว้ตลอดช่วงที่คุณแก้ไขรหัสทิ้งออกไป ทำให้แฟ้มมีขนาดเล็กลง
    ขั้นตอนนี้ให้คลิกขวาที่ชื่อ Module แล้วสั่ง Export File ออกไปเป็นแฟ้มใหม่มีนามสกุล bas แล้วคลิกขวา Remove Module จากนั้นคลิกขวาที่ตัว Module สั่ง Import File .bas เข้ามาใหม่

 

Categories

About this Entry

This page contains a single entry by สมเกียรติ ฟุ้งเกียรติ published on October 29, 2006 11:23 PM.

ขั้นตอนสร้างรหัส VBA โดยใช้ Macro Recorder was the previous entry in this blog.

วิธีใช้ VBA ให้คุ้มค่า is the next entry in this blog.

Find recent content on the main index.

Font s :
Background :