วันศุกร์ที่ 14 มิถุนายน พ.ศ. 2556

Excel Vba : กับ animation Form (vba)

วันนี้ได้ฤกษ์งามยามดี ถึงเวลาสักทีที่ต้องเขียนเกี่ยวกับเรื่อง VBA บน Microsoft Excel สักที เนื่องด้วยว่า เนื้อหาใน blog แห่งนี้ที่ผ่านมาส่ว... thumbnail 1 summary
วันนี้ได้ฤกษ์งามยามดี ถึงเวลาสักทีที่ต้องเขียนเกี่ยวกับเรื่อง VBA บน Microsoft Excel สักที เนื่องด้วยว่า เนื้อหาใน blog แห่งนี้ที่ผ่านมาส่วนใหญ่จะพูดถึงเรื่องทั่วๆไปของ MS Excel เสียมากกว่า และก็พูดถึงเรื่องสูตร บน Microsoft Excel ซะส่วนใหญ่ ยังไม่ค่อยได้ลงเรื่องเกี่ยวกับ VBA เลย เนื่องจากผู้เขียนมัวแต่ขี้เกียจ อิๆ ล้อเล่นน่ะ จริงๆ อยากมาอับให้อ่านกันทุกวันนั้นแหละ แต่เนื่องจากเวลาไม่ค่อยจะมี แถมการอับบ่อยๆ ก็เกรงว่า blog จะโดนลบอีก เฮ้อเหนื่อยใจ แต่ยังไงซะวันนี้ก็ต้อง อับ blog ให้จงได้ เอาละ เข้าสู่เนื้อหาของเรื่องวันนี้กันดีกว่า เพื่อให้ไม่เป็นการเสียเวลาทำมาหากิน เริ่มเลยแล้วกัน


• เปิด Microsoft Excel ขึ้นมา ใคร มี Excel 2007 ก็เปิด Excel 2007 ใคร มี Excel 2010 ก็เปิด Microsoft Excel 2010 ขึ้นมาแล้วกัน

• หลังจากที่เปิด Microsoft Excel ให้เป็นที่ปรากฏต่อสายตาของเราแล้ว ให้เรา กด ALT แล้วกด F11 ที่คีย์บอร์ด เพื่อเปิดหน้าต่างของ VBA ขึ้นมา

• หลังจากที่เปิด VBA ขึ้นมาแล้ว ให้เราคลิ้กขวาตรงพื้นที่ขาวๆ ตรงบริเวณที่ล้อมรอบด้วยกรอบสี่เหลี่ยมสีแดง ดังภาพด้านล่าง แล้วเลือก คำสั่ง Insert จากนั้นคลิ้กที่ User form ดูภาพด้านล่างประกอบด้วยเพื่อความเข้าใจน่ะจ๊ะ

 

·      เมื่อ insert userform แล้ว ก็จะได้ userform มา 1 พร้อมกับมีกล่องเครื่องมือ ที่มี control ให้พร้อมเอามาใช้งาน รวมทั้งมี ในเรื่องของ ส่วนที่ใช้กำหนดค่า (properties) ให้กับ userform ของเรามาด้วย
ขออธิบายเพิ่มเติมน่ะ ดูจากภาพด้านบนเลย

หมายเลข 1 คือ พื้นที่การทำงานของเรา (Userform) ที่เราเพิ่มเข้ามา หมายเลขที่ 2 คือ กล่องเครื่องมือ หรือเรียกว่า Toolbox ซึ่งจะประกอบไปด้วย Ctrol มากมาย อย่างเช่น Control Commandbutton หรือ เรียกง่ายๆเป็นภาษาไทยว่า ปุ่มเอาไว้กด เพื่อสั่งงานตามที่เราได้เขียนโปรแกรมกำกับไว้ หมายเลข 3 คือ บริเวณที่เราใช้กำหนดค่าให้กับ Control หรือ กำหนดให้กับ Userform ของเรา ถ้าตอนนี้ยังงงๆอยู่ พอลองศึกษาจากตัวอย่างที่นำเสนอวันนี้แล้วคิดว่าน่าจะเข้าใจกัน

• หลังจากที่ เพิ่ม(insert) Userform เข้ามาแล้ว ให้เราเพิ่ม ปุ่มสำหรับกด หรือ เรียกว่า Commandbutton มา 1 ปุ่ม เอามาวางไว้บน Userform ดังภาพด้านล่างนี้

วิธีการนำปุ่ม CommandButton มาวางบน Userform ให้ทำดังนี้ คือ ให้กดที่ปุ่มสี่เหลี่ยมเล็กๆบน toolbox 1 ครั้งแล้วเลื่อนเมาส์มาบน userform หลังจากนั้นกดเม้าส์ค้างไว้แล้วลากเม้าส์วาด Commandbutton บน Userform ได้เลย พอได้ขนาดที่ต้องการก็ปล่อยปุ่มเม้าส เราก็จะได้ Commnadbutton บนฟอร์มตามภาพที่เห็นด้านบน


จากภาพด้านบนจะเห็นว่า มีการวาดสี่เหลี่ยมครอบบน กล่อง properties อยู่ 3 จุด ด้านบนสุด ที่เขียนว่า

CommandButton1 แล้วด้านขวาเขียนว่า CommandButton หมายความว่า ตอนนี้มี ปุ่มกด หรือ CommandButton ถูกเลือกถูกคลิ้กเลือกอยู่ โดยชื่อของมันที่ถูกตั้งมาแล้วแบบอัติโนมัติคือชื่อ CommandButton1



สี่เหลี่ยมส่วนที่สอง ที่เขียนว่า (Name) แล้วด้านขวาเขียนว่า CommandButton1 หมายความว่า ปุ่ม Commandbutton ที่เราวาดบน Userform มีชื่อว่า CommandButton1 ซึ่งเราสามารถลบออกแล้วตั้งชื่อใหม่ตามที่เราต้องการได้





ต่อมา สี่เหลี่ยมตัวสุดท้าย ที่เขียนว่า

Caption แล้วด้านขวามือเขียนว่า CommandButton1 หมายความว่า ตอนนี้ ปุ่มกดหรือ CommandButton ตัวนี้มีข้อความปรากฏบนตัวของมันว่า “CommandButton1” ซึ่งเราสามารถลบออกแล้วเขียนเป็นคำอื่นที่เตาต้องการได้ เช่น “กดฉันซิ”, หรือ “คำนวณ” อะไรประมาณนี้

• ขั้นตอนต่อไป เราจะเปลี่ยนชื่อให้กับ ปุ่มกดของเรา และเปลี่ยน Caption(จ่าหน้า) ของมันด้วย ดูตามภาพด้านล่างเลยจ๊ะ

จากภาพเราจะเห็นว่า เมื่อเราเปลี่ยนตรง Caption เป็นข้อความ อื่น ในตัวอย่างนี้เปลี่ยนข้อความบน CommandButton1 เป็น Move Userform

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

• ขั้นตอนต่อไป ให้เรา double click บน ปุ่ม CommandButton1ที่อยู่บน Userform

แล้วใส่ โค้ดโปรแกรมดังต่อไปนี้ลงไป

Dim StopTime, StartTime, EndTime

If (MsgBox("Press Yes to PAUSE for 5 Seconds", vbYesNo)) = vbYes Then

StopTime = 5 ' Set duration.

StartTime = Timer ' Set start time.



Do While Timer < (StartTime + StopTime)

Me.Left = Me.Left + 0.05

DoEvents ' Yield to other processes.



Loop

EndTime = Timer ' Set end time.

Me.Left = (Application.Width / 2)

Me.Caption = "I'm be back"

Else

End

End If

จากรูปเราจะเห็นว่า เราวางส่วนของโค้ดโปรแกรมเข้าไประหว่างบรรทัด

Private Sub Cmd1_Click()



ใส่โค้ดตรงนี้



End Sub

เห็นคำว่า Cmd1 ไหมครับ มันคือชื่อของปุ่ม ที่เราตั้งไว้นั่นเองครับ

• จากนั้นเราก็ กด F5 ที่ คีย์บอร์ด 1 ครั้ง เพื่อสั่งให้โปรแกรมของเราทำงาน เมื่อกด F5 ก็จะปรากฏฟอร์มขึ้นมาดังนี้

จากภาพจะเห็นว่า Userform ปรากฏตัวอยู่เหนือ Microsoft Excel แล้วในตอนนี้ เราก็พร้อมทดสอบโปรแกรมของเราแล้วเช่นกัน นั่นคือ ให้เราคลิ้กที่ปุ่ม MOVE USERFORM 1 ครั้ง แล้วดูผลการทำงาน

.. เห็นอะไรไหมครับUserform ของเรากำลังเคลื่อนที่จากซ้ายมือไปขวามือ พอเวลาผ่านไป 5 วินาที ฟอร์มของเราก็จะกลับมาที่ตำแหน่ง (me.width/2) เมื่อเรากดที่ปุ่ม MOVE USERFORM อีกครั้ง มันก็จะทำเช่นเดียวกันนี้ไปเรื่อยๆครับ

เราสามารถเอาตัวอย่างนี้ไปทำ animation ตอนปิดฟอร์มของเราก็ได้ครับ