การกระพริบเซลล์ เพื่อแจ้งเตือนเมื่อถึงนัดหมายสำคัญ ใน Excel โดยใช้ VBA
นอกจากการทำ Highlight แบบปกติด้วยสีแล้ว
เรายังสามารถทำให้เซลล์ใดๆ กระพริบได้ด้วย โดยใช้ความสามารถของ VBA .. ถ้าใครเคยใช้
Condition Formatting ย่อมทราบดีว่า
เราสามารถให้ Excel ระบายเซลล์ใดๆ
ด้วยสีเมื่อเงื่อนไขเป็นไปตามที่เราต้องการได้ โดยสามารถระบายทั้งแถว ทั้งคอลัมน์
หรือเพียงแค่เซลล์ใดเซลล์หนึ่งเท่านั้นก็ได้
เช่น ถ้าเซลล์ A1 มีค่าเท่ากับ 20 ให้ระบายสีเหลืองที่เซลล์นั้นๆ
เป็นต้น
Excel ไม่มีฟังก์ชั่นที่ให้เซลล์กระพริบโดยตรง
เราจึงต้องใช้ Visual
Basic for Application (VBA) เข้ามาช่วย โดยการใช้คำสั่ง
Application.OnTime เพื่อสั่งให้มันกระพริบทุกๆ
กี่วินาที หรือ กี่โมง ก็แล้วแต่เรา
Application.OnTime
คือ
คำสั่งที่เอาไว้ Run Sub ต่างๆ
ในเวลาที่เราต้องการ ... ไปดูวิธีการทำ เซลล์กระพริบกันเลย ไม่ยากครับ
1. เปิด Excel ขึ้นมา
2. ไปที่แท็บ
Developer (ถ้าแท็บนี้ไม่ปรากฏเราต้องไปทำให้มันแสดงก่อนน่ะครับ)
3. คลิ้กที่
Insert ในส่วนของ
ActiveX Controls ให้เราคลิ้กที่
Command Button (ActiveX
Control) แล้วนำมาวางที่ sheet1 จากนั้น
คลิ้กขวาที่ Command
Button1 แล้วคลิ้ก Properties ในช่อง Caption เปลี่ยนจากคำว่า
CommandButton1 เป็น “เริ่มกระพริบ”
4. คลิ้กที่
Insert อีกครั้ง ในส่วนของ
ActiveX Controls ให้เราคลิ้กที่
Command Button (ActiveX
Control) แล้วนำมาวางที่ sheet1 จากนั้น
คลิ้กขวาที่ Command
Button2 แล้วคลิ้ก Properties ในช่อง Caption เปลี่ยนจากคำว่า
CommandButton2 เป็น “หยุดกระพริบ”
5. ที่ sheet1 เซลล์ A3 พิมพ์เลข
5 ลงไป
6. จากนั้นให้เรากดปุ่ม
Alt และปุ่ม
F11 เพื่อเปิดหน้าจอการเขียนโค้ด
VBA ขึ้นมา
7. ที่ด้านซ้ายมือให้เราคลิ้กขวา
แล้วคลิ้กที่ Insert แล้วคลิ้กที่
Module เพื่อสร้าง
Module1 ขึ้นมา
8. ที่ Module1 ให้เรา
ใส่โค้ดต่อไปนี้ลงไป
Public NextBlink As Double
Public Const MyBlinkCell As String = "Sheet1!A3"
Sub BeginBlink()
If
Range(MyBlinkCell).Interior.ColorIndex = 7 And Range("a3").Value = 5
Then
Range(MyBlinkCell).Interior.ColorIndex = xlColorIndexNone
Else
Range(MyBlinkCell).Interior.ColorIndex = 7
End If
NextBlink = Now +
TimeSerial(0, 0, 1)
Application.OnTime
NextBlink, "BeginBlink", , True
End Sub
Sub StopBlink()
Range(MyBlinkCell).Interior.ColorIndex = xlColorIndexNone
Application.OnTime
NextBlink, "BeginBlink", , False
End Sub
การทำงานของโค้ด
ประกาศตัวแปร NexBlink เพื่อรับค่าเวลาจากระบบ
Computer
ประกาศตัวแปรคงที่ชื่อ
MyBlinkCell เป็นชนิดข้อความ
ทำหน้าที่อ้างถึง Sheet1 เซลล์ A3
สร้าง Sub BeginBlink() ขึ้นมา
เพื่อสั่งให้เซลล์กระพริบ โดยการทำงานใน Sub นี้
จะเป็นการตรวจสอบว่าเซลล์ที่ต้องการกระพริบเป็นสีที่เรากำหนดหรือไม่
และเซลล์ดังกล่าว (ในกรณีนี้คือเซลล์ A3) มีค่าเท่ากับ 5 ใช่หรือไม่
If Range(MyBlinkCell).Interior.ColorIndex = 7 And Range("a3").Value = 5 Then
ถ้าเงื่อนไขเป็นจริง
นั่นคือ สีพื้นในเซลล์ A3
เท่ากับ
สีชมพู และ มีค่าเท่ากับ 5
จะทำการเคลียร์สีพื้นออก
(ไม่ใส่สี)
ตามโค้ดนี้ Range(MyBlinkCell).Interior.ColorIndex =
xlColorIndexNone
แต่ถ้าเงื่อนไขไม่เป็นจริง
ก็จะกระโดดมาทำที่คำสั่ง Else และกำหนดสีพื้นของเซลล์เป็นสีชมพู ตามโค้ดด้านล่างนี้
Range(MyBlinkCell).Interior.ColorIndex = 7
ตัวแปร NextBlink จะเก็บค่าเวลาทุก
ๆ 1 วินาทีมาเก็บไว้กับตัว โดยรับเวลามาจากเวลาของเครื่องในขณะนั้น
เอาเฉพาะวินาที ตามที่กำหนดในคำสั่ง TimeSerial(0,0,1) ดังโค้ดด้านล่างนี้
NextBlink=Now+TimeSerial(0,01)
จากนั้น Application.OnTime จะเรียกใช้คำสั่ง
BeginBlink เพื่อใส่สีพื้นที่เซลล์
A3 และ
เอาสีพื้นออกตามเงื่อนไขในคำสั่ง IF ทุกๆ 1 วินาที
ดังโค้ดต่อไปนี้
Application.OnTime
NextBlink, "BeginBlink", , True
การหยุดการพริบเซลล์
เราได้เขียน Sub StopBlink เพื่อสั่งให้เซลล์หยุดกระพริบไว้ดังนี้
Range(MyBlinkCell).Interior.ColorIndex
= xlColorIndexNone
Application.OnTime NextBlink,
"BeginBlink", , False
บรรทัดแรกคือ
ไม่ใส่สีที่เซลล์ที่ต้องการให้กระพริบ (ในที่นี้คือเซลล์ A3)
บรรทัดที่สอง ใช้ Application.Ontime ยกเลิกการทำงานของ
คำสั่ง BeginBlink โดยการใส่
False
9. กด Alt+F11 เพื่อกลับไปที่
Excel (ปุ่ม Alt+F11 ใช้เพื่อกดสลับไปมาระหว่างหน้าจอ
Excel กับหน้าจอเขียนโค้ด
VBA) จากนั้นไปดับเบิ้ลคลิ้กที่
ปุ่ม “เริ่มกระพริบ” แล้วใส่โค้ดเข้าไปภายใน
sub CommandButton1_Click
ดังนี้
Private Sub
CommandButton1_Click() 'เริ่มกระพริบเซลล์
Module1.BeginBlink
End Sub
10.
กด Alt+F11 เพื่อกลับไปที่
Excel อีกครั้ง
จากนั้นไปดับเบิ้ลคลิ้กที่ ปุ่ม “หยุดกระพริบ” แล้วใส่โค้ดเข้าไปภายใน
sub CommandButton2_Click
ดังนี้
Private Sub CommandButton2_Click()
Module1.StopBlink 'หยุดกระพริบเซลล์
End Sub
11.
กดปุ่ม Alt+F11 เพื่อกลับมาที่
Excel จากนั้นไปที่แท็บ
Developer กดที่ปุ่ม
Design Mode ให้เด้งขึ้นมา
เพื่อเข้าสู่โหมดสั่งให้โปรแกรมทำงาน
แล้วลองคลิ้กที่ ปุ่มเริ่มกระพริบ
จะพบว่า เซลล์ A3 มีการกระพริบ..สังเกตุผลลัพธ์ดูครับ
ลองกดที่ปุ่ม หยุดกระพริบ เพื่อสั่งให้เซลล์หยุดกระพริบ
เพิ่มเติมอีกหน่อย
ในตัวอย่างนี้เป็นการสั่งงานให้เซลล์กระพริบและหยุดกระพริบโดยเราต้องกดปุ่ม
เริ่มกระพริบ หยุดกระพริบ เอง.. ถ้าต้องการให้ sheet นี้ทำงานอัติโนมัติเมื่อเปิด
sheet ขึ้นมา
เราก็แค่ Copy คำสั่ง
Module1.BeginBlink
ไปไว้ในเหตุการณ์
Wookbook_Open ก็ได้ครับ ดังโค้ดด้านล่างครับ..
Private Sub
Workbook_Open()
Module1.BeginBlink
End Sub
จบแล้วครับสำหรับการทำให้เซลล์กระพริบ เราอาจนำวิธีการนี้ไปใช้เพื่อการแจ้งเตือนกำหนดการนัดหมายให้กับเราก็ได้ครับ..เช่น
เมื่อถึงวันนัดก็ให้เกิดการกระพริบที่เซลล์ขึ้น, หรืออาจจะเอาไปประยุกต์เกี่ยวกับงานด้านเกมส์ก็ได้น่ะครับ
ไอเดียเล็กๆแบบนี้ต่อยอดเป็นงานที่สร้างความบันเทิงและประโยชน์ให้กับเรา หรือคนอื่นก็ได้ครับ
บางคนอาจสงสัยว่าทำให้ตัวหนังสือกระพริบแทนที่จะเป็นเซลล์ได้หรือไม่
คำตอบคือทำได้ครับ แค่เปลี่ยนจากการใส่สีพื้นมาใส่ให้ข้อความ แทนไม่ใช่เรื่องยากอะไร..ลองไปปรับเปลี่ยนโค้ดดูครับ
ถ้าติดขัดตรงไหนสามารถเข้ามาสอบถามที่เว็บไซด์ได้ครับ

ไม่มีความคิดเห็น:
แสดงความคิดเห็น