Excel VBA การเขียนโปรแกรมจัดการข้อมูลใน Excel เบื้องต้น

Excel VBA คือการเขียนโปรแกรมเพื่อจัดการข้อมูลใน Excel ซึ่ง VBA ย่อมาจากคำว่า Visual Basic for Application เป็นภาษาคอมพิวเตอร์ที่พัฒนาโดย Microsoft ซึ่งช่วยให้เราสามารถเขียนคำสั่งควบคุมการทำงาน หรือจัดการกับข้อมูลใน Excel ได้สะดวกและรวดเร็วยิ่งขึ้น

Object ออบเจ็กต์ที่ควรรู้

Object ในเอ็กเซลจะเก็บเป็นลำดับชั้น โดย Object ระดับบนสุดคือออบเจ็กต์ Application ถัดมาคือออบเจ็กต์ Workbook ซึ่งอยู่ภายในออบเจ็กต์ Application อีกที ถัดมาคือออบเจ็กต์ Worksheet ซึ่งอยู่ภายในออบเจ็กต์ Workbook อีกที

ลำดับชั้นของออบเจ็กต์ใน Excel
ลำดับชั้นของออบเจ็กต์ใน Excel

ในแต่ละ Object จะประกอบไปด้วย

  • Properties พร็อพเพอร์ตี้ คือ คุณสมบัติของออบเจ็กต์ หมายถึงสิ่งที่อธิบายถึงคุณลักษณะของออบเจ็กต์นั้น ๆ ได้ เช่น ชื่อ, เวอร์ชัน, สถานะ เป็นต้น
  • Method เมธอด คือ ความสามารถ หมายถึงสิ่งที่อธิบายว่าออบเจ็กต์นั้น ๆ สามารถทำอะไรได้บ้าง เช่น บันทึก, เพิ่ม, ลบ, เปิด, ปิด เป็นต้น
  • Event อีเวนต์ คือ เหตุการณ์ที่เกิดขึ้นกับออบเจ็กต์ในแต่ละขณะ เช่น ขณะบันทึก, หลังจากบันทึกเสร็จแล้ว, ขณะกำลังปิด เป็นต้น

Visual Basic Editor

Visual Basic Editor คือหน้าจอสำหรับการเขียนคำสั่ง VBA ซึ่งทุกครั้งที่จะทำการเขียนโค้ด VBA เราจะต้องทำผ่านหน้าจอนี้ โดยเราสามารถเปิดหน้าจอ Visual Basic Editor ได้โดยการกดปุ่ม Alt + F11 บนคีย์บอร์ด

โดยหน้าตาและส่วนประกอบต่าง ๆ ของ Visual Basic Editor มีดังนี้

  1. Menu Bar เป็นเมนูคำสั่งการทำงานต่าง ๆ
  2. Toolbar แถบรวบรวมกลุ่มคำสั่งที่มักใช้งานบ่อย ๆ
  3. Project Explorer หน้าต่างสำหรับแสดง Workbook และ Worksheet ที่กำลังเปิดใช้งานอยู่
  4. Properties Window หน้าจอแสดงคุณสมบัติของสิ่งที่กำลังเลือกอยู่ในขณะนั้น ๆ
  5. Code Window หน้าจอสำหรับเขียนโค้ด

การเขียนโค้ดใน Visual Basic Editor

เมื่อต้องการเขียนโค้ด เราต้องทำการเปิด Visual Basic Editor ขึ้นมาก่อน โดยกดปุ่ม Alt + F11 บนคีย์บอร์ด หลังจากนั้นเลือกว่าจะเขียนโค้ดลงในออบเจ็กต์ใด โดยให้ดูที่ Project Explorer และดับเบิ้ลคลิกออบเจ็กต์ที่ต้องการ

ในตัวอย่างผมเลือกดับเบิ้ลคลิกที่ ThisWorkbook เพื่อเขียนโค้ดในออบเจ็กต์เวิร์คบุ๊ก ที่หน้าต่างด้านขวามือก็จะเปิดหน้าจอสำหรับเขียนโค้ดขึ้นมา

ลำดับต่อไปเราต้องเลือกว่าจะเขียนโค้ดกับออบเจ็กต์ใด ในตัวอย่างผมเลือก Workbook

select object
เลือกออบเจ็กต์

เมื่อเลือกออบเจ็กต์เสร็จแล้ว โปรแกรมจะเลือก Event ให้โดยอัตโนมัติ และเพิ่มโค้ดเข้ามาให้ส่วนหนึ่ง เราสามารถเลือก Event อื่น ๆ ได้ตามต้องการ ในตัวอย่างเลือกเป็น AfterSave โปรแกรมก็จะเพิ่มโค้ดมาให้ส่วนหนึ่ง

เลือก Event

Event ที่เลือกในตัวอย่างคือ AfterSave ความหมายก็คือ เราจะเขียนคำสั่งควบคุมการทำงานว่า หลังจากที่เราบันทึกเวิร์คบุ๊กนี้ จะให้ทำอะไร เรามาลองทดสอบกันดูครับ

ในตัวอย่างผมจะให้แสดงกล่องข้อความว่า “Workbook is saved” หลังจากที่บันทึกเวิร์คบุ๊ก ผมจึงเขียนคำสั่งนี้เข้าไป

MsgBox("Workbook is saved")

ซึ่งโค้ดจะเป็นดังนี้

Private Sub Workbook_AfterSave(ByVal Success As Boolean)
    MsgBox ("Workbook is saved")
End Sub

Private Sub Workbook_Open()

End Sub

เมื่อเราลองบันทึก Workbook ดู ก็จะมีกล่องข้อความแสดงข้อความตามที่เราเขียนไว้ในโค้ด

ผลลัพธ์โปรแกรม

การตั้งค่าโปรเจ็กต์

เราสามารถตั้งค่าโปรเจ็กต์ของเราได้ เช่น ตั้งชื่อโปรเจ็กต์ ตั้งรหัสผ่านป้องกันไม่ให้ใครเห็น เป็นต้น

Project Properties
  1. คลิกที่เมนู Tools
  2. คลิกที่ VBAProject Properties…
ตั้งชื่อโปรเจ็กต์
  • คลิกที่แท็บ General
  • ช่อง Project Name: ให้ระบุชื่อโปรเจ็กต์ ขึ้นต้นด้วยตัวอักษรและไม่มีช่องว่าง
  • ช่อง Project Description: สามารถใส่คำอธิบายโปรเจ็กต์ได้
ตั้งค่าความปลอดภัยให้โปรเจ็กต์
  • คลิกที่แท็บ Protection
  • ติ๊กที่ Lock project for viewing
  • ที่ช่อง Password ให้กำหนดรหัสผ่าน
  • ที่ช่อง Confirm password ให้ยืนยันรหัสผ่าน
  • เสร็จแล้วคลิกปุ่ม OK

ถ้าเราได้ตั้งค่าในส่วนของ Protection หลังจากได้ปิดไฟล์ไปแล้วและเปิดขึ้นมาใหม่ จะไม่สามารถมองเห็นโปรเจ็กต์ที่ได้สร้างไว้

โปรเจ็กต์ถูกซ่อน

และเมื่อพยายามเปิดดู ก็จะถูกแจ้งเตือนให้ป้อนรหัสผ่าน

ป้อนรหัสผ่าน

เมื่อป้อนรหัสผ่านถูกต้องแล้วจึงจะสามารถมองเห็นรายการโปรเจ็กต์ได้

รายการโปรเจ็กต์

การเขียนโค้ดใน Module

การเขียนโค้ดที่เราทำในออบเจ็กต์ต่าง ๆ จะมีผลเฉพาะในออบเจ็กต์นั้น ๆ เท่านั้น แต่ถ้าต้องการให้โค้ดสามารถทำงานได้ในทุก ๆ ออบเจ็กต์ในโปรเจ็กต์เดียวกัน ต้องเขียนโค้ดลงใน Module ซึ่งสามารถทำได้ดังนี้

เพิ่มโมดูล

ที่หน้า Visual Basic Editor ให้คลิกที่เมนู Insert -> Module

จะมีหน้าต่างโมดูลเพิ่มเข้ามา ให้เราเขียนโค้ดเข้าไปได้เลย

เขียนโค้ดในโมดูล

ให้คลิกปุ่ม ▶ หรือ กดปุ่ม F5 เพื่อรันโค้ด ก็จะได้ผลลัพธ์ตามที่ต้องการ

ผลลัพธ์

การเขียนคำสั่งเดียวกันแยกเป็นหลายบรรทัด

ในกรณีที่คำสั่งในบรรทัดหนึ่ง ๆ มีความยาวมากเกินไป เราสามารถแยกคำสั่งขึ้นบันทัดใหม่ได้ โดยจะต้องเว้นวรรค 1 ครั้ง ตามด้วยเครื่องหมายอันเดอร์สกอร์ _ ดังตัวอย่าง

Private Sub Workbook_AfterSave(ByVal Success As Boolean)
    MsgBox ("Message 1 " & _
    "Message 2 " & _
    "Message 3 " & _
    "Message 4 " & _
    "Message 5 " & _
    "Message 6")
End Sub