คู่มือ VBA ที่ดีที่สุด (สำหรับผู้เริ่มต้น) คุณจะต้องการ

แพลตฟอร์มการเขียนโปรแกรม VBA ที่ทำงานในผลิตภัณฑ์ Microsoft Office เกือบทั้งหมดเป็นหนึ่ง(VBA programming)ใน(Microsoft Office)เครื่องมือที่ทรงพลังที่สุดที่ทุกคนสามารถใช้เพื่อปรับปรุงการใช้ผลิตภัณฑ์เหล่านั้น

คู่มือ VBA(VBA) สำหรับผู้เริ่มต้น นี้จะแสดงวิธีเพิ่มเมนูนักพัฒนาซอฟต์แวร์ ให้กับแอปพลิเคชัน (Developer)Office ของคุณ วิธีเข้าสู่หน้าต่างตัวแก้ไขVBA และวิธีการทำงานของคำสั่งและลูป (VBA)VBA พื้นฐาน เพื่อให้คุณสามารถเริ่มต้นใช้งานVBAในExcel , Word , Powerpoint OutlookและOneNote _

คู่มือ VBA(VBA)นี้ ใช้ ผลิตภัณฑ์Microsoft Officeเวอร์ชันล่าสุด หากคุณมีเวอร์ชันก่อนหน้า คุณอาจเห็นความแตกต่างเล็กน้อยจากภาพหน้าจอ

วิธีเปิดใช้งานและใช้งาน VBA Editor(How To Enable & Use The VBA Editor)

ใน ผลิตภัณฑ์ Office ใดๆ ที่ ใช้ในคู่มือนี้ คุณอาจสังเกตเห็นว่าคุณไม่มีเมนูนักพัฒนา ที่อ้างอิง (Developer)เมนูนักพัฒนาใช้ได้เฉพาะในExcel , Word , OutlookและPowerpoint OneNoteไม่มีเครื่องมือในการแก้ไข โค้ด VBAจากภายในแอปพลิเคชัน แต่คุณยังสามารถอ้างอิงOneNote APIเพื่อโต้ตอบกับOneNoteจากโปรแกรม  Office อื่นๆ ได้(Office)

คุณจะได้เรียนรู้วิธีดำเนินการนี้ในคู่มือVBA ขั้นสูง ที่กำลังจะมีขึ้น(Advanced VBA)

  • หากต้องการเปิดใช้งาน เมนู นักพัฒนาซอฟต์แวร์(Developer)ในผลิตภัณฑ์สำนักงานใดๆ ให้เลือก เมนู ไฟล์(File)แล้วเลือกตัวเลือก(Options)จากเมนูการนำทางด้านซ้าย 
  • คุณจะเห็นป๊อปอัปเมนูตัวเลือก (Options)เลือกกำหนด Ribbon เอง(Customize Ribbon)จากเมนูนำทางด้านซ้าย

รายการด้านซ้ายประกอบด้วยเมนูและคำสั่งเมนูทั้งหมดที่มีในแอปพลิเคชันOffice นั้น (Office)รายการทางด้านขวาคือรายการที่มีอยู่หรือเปิดใช้งานอยู่ในปัจจุบัน

  • คุณควรเห็นDeveloperในรายการทางด้านขวา แต่จะไม่ถูกเปิดใช้งาน เพียง(Just)เลือกช่องทำเครื่องหมายเพื่อเปิดใช้งานเมนูนักพัฒนา(Developer)

  • หากคุณไม่เห็นนักพัฒนาซอฟต์แวร์(Developer)ที่ใช้งานได้ทางด้านขวา ให้เปลี่ยนทางซ้ายเลือกคำสั่ง(Choose commands)จากดรอปดาวน์เป็นคำสั่ง(All Commands)ทั้งหมด ค้นหาDeveloperจากรายการและเลือกAdd>>ตรงกลางเพื่อเพิ่มเมนูนั้นในRibbon
  • เลือกตกลง(OK)เมื่อคุณทำเสร็จแล้ว
  • เมื่อ เมนู Developer เปิด ใช้งานอยู่ คุณสามารถกลับไปที่หน้าต่างแอปพลิเคชันหลักและเลือกDeveloperจากเมนูด้านบน 
  • จากนั้นเลือกดูโค้ด(View Code)จากกลุ่มตัวควบคุม(Controls)ใน Ribbon เพื่อเปิดหน้าต่างตัวแก้ไขVBA

  • ซึ่งจะเปิด หน้าต่างตัวแก้ไข VBAซึ่งคุณสามารถพิมพ์โค้ดที่คุณจะได้เรียนรู้ในหัวข้อถัดไป

  • ลองเพิ่มเมนูนักพัฒนา ลงในแอปพลิเคชัน (Developer)Office บางตัวที่ คุณใช้ทุกวัน เมื่อคุณสะดวกที่จะเปิด หน้าต่างตัวแก้ไข VBAแล้ว ให้ไปยังส่วนถัดไปของคู่มือนี้

เคล็ดลับการเขียนโปรแกรม VBA ทั่วไปสำหรับผู้เริ่มต้น(General VBA Programming Tips for Beginners)

คุณจะสังเกตเห็นเมื่อตัว แก้ไข VBAเปิดขึ้น ตัวเลือกการนำทางในแผงด้านซ้ายจะดูแตกต่างจากแอปพลิเคชันOffice หนึ่งไปยังอีกแอปพลิเคชันหนึ่ง(Office)

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

ดังนั้นอย่าแปลกใจกับเมนูต่างๆ โครงสร้างและไวยากรณ์ของ โค้ด VBAจะเหมือนกันในทุกแอปพลิเคชัน ข้อแตกต่างเพียงอย่างเดียวคืออ็อบเจ็กต์ที่คุณสามารถอ้างอิงได้และการดำเนินการที่คุณสามารถทำกับออบเจกต์เหล่านั้นผ่านโค้ดVBA

ก่อนที่เราจะเจาะลึกลงไปในอ็อบเจกต์และการดำเนินการต่างๆ ที่คุณสามารถทำได้ผ่าน โค้ด VBAอันดับแรก มาดูโครงสร้างและไวยากรณ์ของVBA ทั่วไปที่คุณสามารถใช้ได้เมื่อคุณเขียน โค้ดVBA

จะใส่รหัส VBA ได้ที่ไหน(Where To Put VBA Code)

เมื่อคุณอยู่ใน โปรแกรมแก้ไข VBAคุณต้องใช้กล่องดรอปดาวน์สองกล่องที่ด้านบนของหน้าต่างแก้ไขเพื่อเลือกวัตถุที่คุณต้องการแนบโค้ดไป และเมื่อคุณต้องการเรียกใช้โค้ด

ตัวอย่างเช่น ในExcelถ้าคุณเลือกเวิ(Worksheet) ร์กชีต และเปิดใช้งาน(Activate)โค้ดจะทำงานทุกครั้งที่เปิดเวิร์กชีต 

การดำเนินการในเวิร์กชีตอื่นๆ ที่คุณสามารถใช้เพื่อทริกเกอร์ โค้ด VBA ของคุณ รวมถึงเวลาที่เวิร์กชีตเปลี่ยนแปลง เมื่อปิด (ปิดใช้งาน) เมื่อรันการคำนวณเวิร์กชีต และอื่นๆ

เมื่อคุณเพิ่ม โค้ด VBAในตัวแก้ไข ตรวจสอบให้แน่ใจเสมอว่าได้วาง โค้ด VBA ของคุณ บนวัตถุ และใช้การดำเนินการที่ถูกต้องที่คุณต้องการใช้เพื่อทริกเกอร์โค้ดนั้น

คำสั่ง VBA IF(VBA IF Statements)

คำสั่ง IF ทำงานในVBAเหมือนกับที่ทำงานในภาษาการเขียนโปรแกรมอื่นๆ

ส่วนแรกของคำสั่ง IF จะพิจารณาว่าเงื่อนไขหรือชุดของเงื่อนไขเป็นจริงหรือไม่ เงื่อนไขเหล่านี้สามารถเข้าร่วมโดยตัวดำเนินการANDหรือ OR เพื่อเชื่อมโยงเข้าด้วยกัน

ตัวอย่างหนึ่งคือตรวจสอบว่าเกรดในสเปรดชีตสูงกว่าหรือต่ำกว่าเกรด "ผ่าน" และกำหนดสถานะผ่านหรือไม่ผ่านให้กับเซลล์อื่น

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 สำหรับลูปถัดไป(VBA For Next Loops)

คำสั่ง IF นั้นยอดเยี่ยมสำหรับการเปรียบเทียบเดี่ยวๆ เช่นตัวอย่างด้านบนของการดูที่เซลล์เดียว แต่ถ้าคุณต้องการวนซ้ำช่วงของเซลล์ทั้งหมด และทำคำสั่ง IF เดียวกันในแต่ละเซลล์ล่ะ

ในกรณีนี้คุณต้องมีลูป  FOR

เมื่อต้องการทำเช่นนี้ คุณจะต้องใช้ความยาวของช่วง และวนรอบความยาวนั้นด้วยจำนวนแถวที่มีข้อมูล

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

Dim rng As Range, เซลล์ As Range (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 script)นี้ คุณจะเห็นผลลัพธ์ในสเปรดชีตจริง

VBA ในขณะที่ลูป(VBA While Loops)

ในขณะที่ลู(Loop)ปยังวนซ้ำผ่านชุดคำสั่งเช่นเดียวกับ ลูป FORแต่เงื่อนไขของการวนซ้ำเพื่อดำเนินการต่อเป็นเงื่อนไขที่ยังคงเป็นจริง

ตัวอย่างเช่น คุณสามารถเขียน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เนื่องจากตัวนับแถวเริ่มต้นที่ 2 และต้องสิ้นสุดที่แถว 7 ที่ข้อมูลสิ้นสุด อย่างไรก็ตาม การนับของช่วง (B2:B7) มีเพียง 6 และการวนรอบในขณะที่จะสิ้นสุดเมื่อตัวนับมีค่ามากกว่าตัวนับเท่านั้น ดังนั้นค่า rowCounter สุดท้ายต้องเป็น 8 (หรือ rng.Count + 2 )(GREATER)

คุณยังสามารถตั้งค่าลูป while ได้ดังนี้:

While rowCounter <= rng.Count + 1

คุณสามารถเพิ่มจำนวนช่วง (6) ได้เพียง 1 เท่านั้น เนื่องจากเมื่อตัวแปร rowCounter ถึงจุดสิ้นสุดของข้อมูล (แถว 7) การวนซ้ำจะสิ้นสุดลง

VBA ทำในขณะที่และทำจนกว่าจะถึงลูป(VBA Do While and Do Until Loops)

ลูป Do while และ Do Until เกือบจะเหมือนกับลูป while แต่ทำงานต่างกันเล็กน้อย

  • ในขณะที่ลูป(While Loop)จะตรวจสอบว่าเงื่อนไขเป็นจริงที่จุดเริ่มต้นของลูปหรือไม่
  • Do-While Loopจะตรวจสอบว่าเงื่อนไขเป็นจริงหรือไม่หลังจากดำเนินการคำสั่งในลูป
  • Do-Until Loopจะตรวจสอบว่าเงื่อนไขยังคงเป็นเท็จหรือไม่หลังจากดำเนินการวนซ้ำ

ในกรณีนี้ คุณจะต้องเขียนลูป while ด้านบนใหม่ดังนี้ เป็นลูป Do-While

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

ในกรณีนี้ ตรรกะไม่ได้เปลี่ยนแปลงมากนัก แต่ถ้าคุณต้องการให้แน่ใจว่าการเปรียบเทียบตรรกะเกิดขึ้นหลังจากรันคำสั่งทั้งหมดแล้ว (อนุญาตให้รันทั้งหมดไม่ว่าจะเกิดอะไรขึ้นอย่างน้อยหนึ่งครั้ง) ให้ทำในขณะที่ หรือ Do-Until loop เป็นตัวเลือกที่เหมาะสม

VBA เลือกคำชี้แจงกรณีและปัญหา(VBA Select Case Statements)

คำสั่งตรรกะประเภทสุดท้ายที่คุณจะต้องเข้าใจเพื่อเริ่มจัดโครงสร้างโค้ดVBA ของคุณคือ คำสั่งSelect Case

จากตัวอย่างข้างต้น สมมติว่าคุณต้องการมีวิธีการให้เกรดที่ไม่ใช่แค่การผ่านล้มเหลว แต่คุณต้องการกำหนดเกรดตัวอักษรจาก A ถึง F

คุณสามารถทำได้ด้วย คำสั่ง Select Case ต่อไปนี้ :

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 ของ คุณ(Microsoft Office)



About the author

ฉันเป็นนักพัฒนาซอฟต์แวร์ฟรีแวร์และเป็นผู้ให้การสนับสนุน Windows Vista/7 ฉันได้เขียนบทความหลายร้อยบทความเกี่ยวกับหัวข้อต่างๆ ที่เกี่ยวข้องกับระบบปฏิบัติการ รวมถึงคำแนะนำและเคล็ดลับ คู่มือการซ่อม และแนวทางปฏิบัติที่ดีที่สุด ฉันยังเสนอบริการให้คำปรึกษาเกี่ยวกับสำนักงานผ่านทางบริษัท Help Desk Services ของฉัน ฉันมีความเข้าใจอย่างลึกซึ้งเกี่ยวกับวิธีการทำงานของ Office 365 ฟีเจอร์ และวิธีใช้งานอย่างมีประสิทธิภาพสูงสุด



Related posts