วันอังคารที่ 16 กุมภาพันธ์ พ.ศ. 2564

การกระพริบเซลล์ เพื่อแจ้งเตือนเมื่อถึงนัดหมายสำคัญ ใน Excel โดยใช้ VBA

 การกระพริบเซลล์ เพื่อแจ้งเตือนเมื่อถึงนัดหมายสำคัญ ใน 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

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

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

 

 

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

แสดงความคิดเห็น

ทันข่าว

บทความแนะนำ

ผักขี้หูด “วาซาบิเมืองไทย” ยอดอ่อน ฝักอ่อน ลวกกินกับน้ำพริกช่วยละลายนิ่ว แก้อาหารไม่ย่อย

  ผักขี้หูด “วาซาบิเมืองไทย” ยอดอ่อน ฝักอ่อน ลวกกินกับน้ำพริกช่วยละลายนิ่ว แก้อาหารไม่ย่อย   “ผักขี้หูด”   ไชโป้วหางหนู ถูกพบมากที่สุดในอ...

บทความยอดนิยม