แพลตฟอร์มการเขียนโปรแกรม VBA ที่ทำงานผ่านผลิตภัณฑ์ Microsoft Office เกือบทุกตัว เป็นหนึ่งในเครื่องมือทรงพลังที่สุดที่ใครก็ตามสามารถใช้เพิ่มประสิทธิภาพการใช้ผลิตภัณฑ์เหล่านั้นได้
คู่มือ VBA สำหรับผู้เริ่มต้นนี้จะแสดงวิธีเพิ่มเมนู Developer ในแอปพลิเคชัน Office, วิธีเข้าหน้าต่างแก้ไข VBA, และการทำงานของคำสั่งและลูป VBA พื้นฐาน เพื่อคุณเริ่มใช้ VBA ใน Excel, Word, PowerPoint, Outlook และ OneNote ได้
คู่มือ VBA นี้ใช้เวอร์ชันล่าสุดของผลิตภัณฑ์ Microsoft Office หากคุณมีเวอร์ชันเก่ากว่า อาจเห็นความแตกต่างเล็กน้อยจากภาพหน้าจอ
วิธีเปิดใช้งานและใช้งาน VBA Editor
ในผลิตภัณฑ์ Office ใดๆ ที่ใช้ในคู่มือนี้ คุณอาจสังเกตว่าไม่มีเมนู Developer ที่อ้างอิง เมนู Developer มีให้ใน Excel, Word, Outlook และ PowerPoint เท่านั้น OneNote ไม่มีเครื่องมือแก้ไขโค้ด VBA ภายในแอป แต่คุณยังอ้างอิง OneNote API เพื่อโต้ตอบกับ OneNote จากโปรแกรม Office อื่นได้
คุณจะเรียนรู้วิธีทำในคู่มือ VBA ขั้นสูงที่จะมาถึง
- เพื่อเปิดใช้งานเมนู Developer ในผลิตภัณฑ์ Office ใดๆ เลือกเมนู File และเลือก Options จากเมนูนำทางด้านซ้าย
- จะเห็นเมนู Options ป๊อปอัพ เลือก Customize Ribbon จากเมนูนำทางด้านซ้าย
รายการด้านซ้ายรวมเมนูและคำสั่งเมนูทั้งหมดที่มีในแอปพลิเคชัน Office นั้น รายการด้านขวาคือเมนูที่มีอยู่หรือเปิดใช้งานอยู่แล้ว
- คุณควรเห็น Developer ในรายการด้านขวา แต่จะไม่ได้เปิดใช้งาน แค่ติ๊กเช็กบอกซ์เพื่อเปิดใช้งานเมนู Developer
- หากไม่เห็น Developer ในด้านขวา ให้เปลี่ยนดรอปดาวน์ Choose commands from ด้านซ้ายเป็น All Commands หา Developer จากรายการ เลือก Add>> กลางเพื่อเพิ่มเมนูไปที่ Ribbon
- คลิก OK เมื่อเสร็จ
- เมื่อเมนู Developer เปิดใช้งานแล้ว กลับไปหน้าต่างหลักของแอปพลิเคชัน และเลือก Developer จากเมนูด้านบน
- จากนั้นเลือก View Code จากกลุ่ม Controls บนริบบอน เพื่อเปิดหน้าต่างแก้ไข VBA
จะเปิดหน้าต่างแก้ไข VBA ที่คุณสามารถพิมพ์โค้ดที่จะเรียนรู้ในส่วนต่อไป
- ลองเพิ่มเมนู Developer ในแอปพลิเคชัน Office ที่คุณใช้ทุกวัน ไปเรื่อยๆ เมื่อคุณคุ้นเคยกับการเปิดหน้าต่างแก้ไข VBA แล้ว ไปส่วนต่อไปของคู่มือนี้
เคล็ดลับการเขียนโปรแกรม VBA ทั่วไปสำหรับผู้เริ่มต้น
คุณจะสังเกตตอนหน้าต่าง VBA Editor เปิด ตัวเลือกนำทางในแผงซ้ายดูต่างกันไปในแต่ละแอปพลิเคชัน Office
เพราะอ็อบเจ็กต์ที่สามารถวางโค้ด VBA ได้ ขึ้นอยู่กับว่ามีอ็อบเจ็กต์อะไรในแอปพลิเคชันนั้น เช่น ใน Excel คุณวางโค้ด VBA ได้ที่อ็อบเจ็กต์ Workbook หรือ Sheet ใน Word วางได้ที่ Document ใน PowerPoint วางได้ที่ Modules เท่านั้น
ดังนั้น ไม่ต้องตกใจกับเมนูที่ต่างกัน โครงสร้างและไวยากรณ์โค้ด VBA เหมือนกันทุกแอปพลิเคชัน ความต่างมีเพียงอ็อบเจ็กต์ที่อ้างอิงได้ และการกระทำที่ทำได้บนอ็อบเจ็กต์เหล่านั้นผ่านโค้ด VBA
ก่อนจะเจาะลึ่อ็อบเจ็กต์และการกระทำต่างๆ ผ่านโค้ด VBA มาดูโครงสร้างและไวยากรณ์ VBA พื้นฐานที่ใช้บ่อยที่สุดเมื่อเขียนโค้ด VBA
วางโค้ด VBA ที่ไหน
เมื่ออยู่ใน VBA Editor คุณต้องใช้กล่องดรอปดาวน์สองกล่องด้านบนหน้าต่างแก้ไข เพื่อเลือกอ็อบเจ็กต์ที่ต้องการแนบโค้ด และเวลาที่ต้องการให้โค้ดรัน
เช่น ใน Excel หากเลือก Worksheet และ Activate โค้ดจะรันทุกครั้งที่เปิด Worksheet
Action อื่นของ Worksheet ที่ใช้ทริกเกอร์โค้ด VBA ได้ รวมถึง เมื่อ Worksheet เปลี่ยนแปลง เมื่อปิด (Deactivate) เมื่อรันการคำนวณ Worksheet และอื่นๆ
เมื่อเพิ่มโค้ด VBA ใน Editor ต้องแน่ใจว่าวางโค้ดบนอ็อบเจ็กต์ที่ถูกต้อง และใช้ Action ที่ถูกต้องที่ต้องการให้ทริกเกอร์โค้ดนั้น
คำสั่ง VBA IF Statements
คำสั่ง IF ใน VBA ทำงานเหมือนภาษาโปรแกรมอื่นๆ
ส่วนแรกของ IF ตรวจสอบว่าเงื่อนไขหรือชุดเงื่อนไขเป็นจริงหรือไม่ เงื่อนไขเหล่านี้เชื่อมต่อด้วย AND หรือ OR operator ได้
ตัวอย่าง: ตรวจสอบว่าเกรดในสเปรดชีตสูงกว่าหรือต่ำกว่าเกรด "ผ่าน" และกำหนดสถานะ Pass หรือ Fail ให้เซลล์อื่น
If Cells(2, 2) > 75 Then Cells(2, 3) = "Pass" Else Cells(2, 3) = "Fail"
หากไม่ต้องการให้คำสั่งทั้งหมดอยู่บรรทัดเดียว แยกเป็นหลายบรรทัดได้ด้วยการเพิ่มสัญลักษณ์ "_" ท้ายบรรทัด
If Cells(2, 2) > 75 Then _
Cells(2, 3) = "Pass" Else _
Cells(2, 3) = "Fail"
เทคนิคนี้มักทำให้โค้ดอ่านง่ายและดีบั๊กง่ายขึ้น
ลูป VBA For Next Loops
คำสั่ง IF ดีสำหรับการเปรียบเทียบเดี่ยว เช่น ตัวอย่างข้างต้นดูเซลล์เดียว แต่ถ้าต้องการวนลูปผ่านช่วงเซลล์ทั้งหมด และทำ IF เดียวกันทุกตัว?
ในกรณีนี้ ต้องใช้ลูป FOR
ต้องใช้ความยาวของช่วง (Range) และวนลูปผ่านความยาวนั้นด้วยจำนวนแถวที่มีข้อมูล
ต้องกำหนดตัวแปร Range และ Cell และวนลูปผ่าน ต้องกำหนดตัวนับ (Counter) เพื่อส่งออกผลลัพธ์ไปแถวที่เหมาะสม โค้ด VBA จะมีบรรทัดนี้ก่อน
Dim rng As Range, cell As Range
Dim rowCounter as Integer
กำหนดขนาดช่วงดังนี้
Set rng = Range("B2:B7")
rowCounter = 2
สุดท้าย สร้างลูป FOR วนผ่านทุกเซลล์ในช่วงนั้น และทำการเปรียบเทียบ
For Each cell In rng If cell.Value > 75 Then _ Cells(rowCounter, 3) = "Pass" Else _ Cells(rowCounter, 3) = "Fail" rowCounter = rowCounter + 1 Next cell
เมื่อรันสคริปต์ VBA นี้ คุณจะเห็นผลลัพธ์ในสเปรดชีตจริง
ลูป VBA While Loops
While Loop วนลูปผ่านชุดคำสั่ง เหมือน FOR Loop แต่เงื่อนไขการวนลูปต่อคือ เงื่อนไขยังคงเป็นจริง
เช่น คุณเขียน FOR Loop ข้างต้นเป็น WHILE Loop ได้ โดยใช้ตัวแปร rowCounter
While rowCounter < rng.Count + 2 If Cells(rowCounter, 2) > 75 Then _ Cells(rowCounter, 3) = "Pass" Else _ Cells(rowCounter, 3) = "Fail" rowCounter = rowCounter + 1 Wend
หมายเหตุ: rng.Count + 2 ขีดจำกัดสิ้นสุดจำเป็นเพราะ rowCounter เริ่มที่ 2 และต้องจบที่แถว 7 ที่ข้อมูลจบ แต่ Count ของช่วง (B2:B7) คือ 6 เท่านั้น While Loop จะจบก็ต่อเมื่อ Counter มากกว่า Counter – ดังนั้นค่า rowCounter สุดท้ายต้องเป็น 8 (หรือ rng.Count + 2)
คุณตั้งค่า While Loop แบบนี้ได้อีก:
While rowCounter <= rng.Count + 1
คุณเพิ่ม Range Count (6) แค่ 1 เพราะเมื่อตัวแปร rowCounter ถึงท้ายข้อมูล (แถว 7) ลูปก็จบได้
ลูป VBA Do While และ Do Until Loops
Do While และ Do Until Loops ใกล้เคียง While Loops มาก แตทำงานต่างออกไปเล็กน้อย
- While Loop ตรวจสอบเงื่อนไขจริงที่ต้นลูป
- Do-While Loop ตรวจสอบเงื่อนไขจริงหลังรันคำสั่งในลูป
- Do-Until Loop ตรวจสอบเงื่อนไขยังเป็นเท็จหลังรันลูป
ในกรณีนี้ คุณเขียน While Loop ข้างต้นใหม่เป็น Do-While Loop ดังนี้
Do If Cells(rowCounter, 2) > 75 Then _ Cells(rowCounter, 3) = "Pass" Else _ Cells(rowCounter, 3) = "Fail" rowCounter = rowCounter + 1 Loop While rowCounter < rng.Count + 2
ในกรณีนี้ ตรรกะไม่เปลี่ยนแปลงมาก แต่หากต้องการให้การเปรียบเทียบเกิดขึ้นหลังคำสั่งทั้งหมดรัน (ให้ทุกคำสั่งรันอย่างน้อย 1 ครั้ง) Do-While หรือ Do-Until Loop เป็นตัวเลือกที่ถูกต้อง
คำสั่ง VBA Select Case Statements
ประเภทคำสั่งตรรกะสุดท้ายที่ต้องเข้าใจเพื่อเริ่มโครงสร้างโค้ด VBA คือ Select Case Statements
จากตัวอย่างข้างต้น สมมติคุณต้องการวิธีการให้เกรดไม่ใช่แค่ Pass/Fail แต่อยากให้เกรดตัวอักษร A ถึง F
คุณทำได้ด้วย Select Case Statement ต่อไปนี้:
For Each cell In rng Select Case cell Case 95 To 100 Cells(rowCounter, 3) = "A" Case 85 To 94 Cells(rowCounter, 3) = "B" Case 75 To 84 Cells(rowCounter, 3) = "C" Case 65 To 74 Cells(rowCounter, 3) = "D" Case 0 To 64 Cells(rowCounter, 3) = "F" End Select rowCounter = rowCounter + 1 Next cell
สเปรดชีตผลลัพธ์หลังรันสคริปต์ VBA นี้ จะเหมือนภาพด้านล่าง
ตอนนี้คุณรู้ทุกอย่างที่ต้องการ เพื่อเริ่มใช้ VBA ในแอปพลิเคชัน Microsoft Office ของคุณ