Excel กับการตอบสนองต่อการคลิ้กของเซลล์
Cell click Event on Excel
เราทราบดีว่า Excel มี Control ที่ตอบสนองต่อการคลิ้กอยู่ 2 แบบ
แบบแรกคือ ปุ่ม button ที่อยู่ในส่วนของ Control form
แบบที่สองคือ ปุ่ม button ที่อยู่ในส่วนของ ActiveX Control
เราสามารถเขียน Macro หรือ VBA เพื่อควบคุมให้ปุ่มดังกล่าวตอบสนองต่อการคลิ้กได้อยู่แล้ว
แต่ Excel ก็ยังมี Event ที่ตอบสนองต่อการคลิ้กของ Cell มาให้เราเช่นกัน
กล่าวคือ สมมติว่าเราต้องการที่จะ ให้ Excel รู้ว่าเราคลิ้กที่เซลล์ใดๆ เราจะต้องเขียน Macro หรือ VBA ในส่วนใดเพื่อสนองความต้องการนี้
ยกตัวอย่างเช่น
หากเราจะเขียนโปรแกรมประมาณว่า เมื่อผู้ใช้คลิ้กที่ เซลล์ A1 ซึ่งเราพิมพ์ว่าสีแดง อยู่ในเซลล์นี้ แล้วให้ Excel ใส่สี แดงที่เซลล์ B1 ให้ เราจะทำอย่างไร
เรามาลองดูตัวอย่างของโปรแกรมลักษณะนี้กัน ให้เราทำตามตัวอย่างด้านล่างนี้ครับ เพื่อความเข้าใจที่มากขึ้น
1. ให้เราพิมพ์ที่เซลล์ A1 ว่า “สีแดง”
2. ให้เราพิมพ์ที่เซลล์ A2 ว่า “สีน้ำเงิน”
3. ให้เราพิมพ์ที่เซลล์ A3 ว่า “สีเขียว”
4. ให้เราพิมพ์ที่เซลล์ A4 ว่า “สีเหลือง”
5. ให้เราพิมพ์ที่เซลล์ A5 ว่า “สีชมพู”
6. ส่วน B1:B5 ให้เราปล่อยว่างไว้
7. จัดรูปแบบเซลล์โดยตีกรอบด้วยสีดำเส้นหนาๆหน่อยที่เซลล์ A1:B5
8. ส่วนที่ A6 พิมพ์คำว่า Reset แล้วใส่สีจัดรูปแบบตามภาพด้านล่างนี้ครับ
9
. เมื่อออกแบบทุกอย่างได้ดังภาพแล้ว ให้เรากด Alt+F11 เพื่อไปยังหน้าจอ VBA แล้วใส่ Source code ต่อไปนี้ ลงไปครับ
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If (Target.Address = Range("a1").Address) Then
Range("b1").Select
With Selection.Interior
.Color = vbRed 'red color
End With
End If
' blue color
If (Target.Address = Range("a2").Address) Then
Range("b2").Select
With Selection.Interior
.Color = vbBlue 'blue color
End With
End If
'green color
If (Target.Address = Range("a3").Address) Then
Range("b3").Select
With Selection.Interior
.Color = vbGreen 'green color
End With
End If
'yellow color
If (Target.Address = Range("a4").Address) Then
Range("b4").Select
With Selection.Interior
.Color = vbYellow
End With
End If
'Magenta color (pink color)
If (Target.Address = Range("a5").Address) Then
Range("b5").Select
With Selection.Interior
.Color = vbMagenta
End With
End If
'Reset to white color
If (Target.Address = Range("a6").Address) Then
Range("b1:b5").Select
With Selection.Interior
.Color = vbWhite
End With
End If
End Sub
10. จากโค้ดเราจะอธิบายแค่บางส่วนเท่านั้นนะครับ เพราะส่วนอื่นๆของ Source code ก็ทำงานเช่นเดียวกัน
เนื่องจากเราจะตรวจสอบว่า ผู้ใช้มีการ click ที่เซลล์ ที่เราต้องการหรือไม่ เราจึงต้องเขียน โค้ดในส่วนของ Worksheet_SelectionChange เพราะเป็นส่วนที่โปรแกรม Excel ใช้เช็คว่า มีการกระทำใดๆเกิดขึ้น หรือ มีอะไรเปลี่ยนแปลงที่เซลล์ใดๆบน Worksheet หรือไม่นั่นเอง
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
เขียนโค้ดบริเวณนี้
End sub
เช่น เราต้องการตรวจสอบว่า เซลล์ A1 มีการคลิ้กหรือไม่ เราก็เขียนว่า
If (Target.Address = Range("a1").Address) Then
โค้ดที่ต้องการให้ทำเมื่อมีการคลิ้กที่เซลล์ A1
End if
สังเกตดีๆน่ะครับ...เอาละเรามาดูคำสั่งภายใน if กันว่า เราให้ทำอะไร
Range("b1").Select
With Selection.Interior
.Color = vbRed 'red color
End With
อธิบายโค้ด
Range(“b1”).Select หมายถึง ให้เลือกที่เซลล์ b1
With Selection.Interior ความหมายคือ พอมีการเลือกแล้วก็จะให้ทำ..
.Color=vbRed หมายถึง ใส่สีแดงเข้าไป (ในที่นี้คือใส่สีแดงให้เซลล์ b1)
End with จบประโยค End with
โค้ดในส่วนอื่นก็ความหมายคล้ายๆกันครับไม่ยาก
ในตัวอย่างวันนี้ เพียงแต่ต้องการให้เรารู้วิธีการตรวจสอบการคลิ้กที่ เซลล์ใดๆ ก็เท่านั้นเองครับ...ถือว่าเป็นเรื่องที่ควรจดจำเอาไปใช้ ...สำหรับใครที่ไม่ต้องการที่จะนำ Command Button ออกมาวางแล้วเขียนโค้ดให้ Command Button วิธีการตรวจสอบการคลิ้กที่เซลล์ นับเป็นวิธีการหนึ่งที่ประหยัดพื้นที่ Sheet เราไปอีกแบบครับ..
เกือบลืมไป ขั้นตอนที่ 11. สั่ง Run ให้โปรแกรมเราทำงาน แล้วลองคลิ้กที่เซลล์ A1 A2 A3 A4 A5 รวมถึง เซลล์ A6 ด้วยน่ะครับ แล้วจะเข้าใจว่าโปรแกรมทำงานอย่างไร
. เมื่อออกแบบทุกอย่างได้ดังภาพแล้ว ให้เรากด Alt+F11 เพื่อไปยังหน้าจอ VBA แล้วใส่ Source code ต่อไปนี้ ลงไปครับ
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If (Target.Address = Range("a1").Address) Then
Range("b1").Select
With Selection.Interior
.Color = vbRed 'red color
End With
End If
' blue color
If (Target.Address = Range("a2").Address) Then
Range("b2").Select
With Selection.Interior
.Color = vbBlue 'blue color
End With
End If
'green color
If (Target.Address = Range("a3").Address) Then
Range("b3").Select
With Selection.Interior
.Color = vbGreen 'green color
End With
End If
'yellow color
If (Target.Address = Range("a4").Address) Then
Range("b4").Select
With Selection.Interior
.Color = vbYellow
End With
End If
'Magenta color (pink color)
If (Target.Address = Range("a5").Address) Then
Range("b5").Select
With Selection.Interior
.Color = vbMagenta
End With
End If
'Reset to white color
If (Target.Address = Range("a6").Address) Then
Range("b1:b5").Select
With Selection.Interior
.Color = vbWhite
End With
End If
End Sub
10. จากโค้ดเราจะอธิบายแค่บางส่วนเท่านั้นนะครับ เพราะส่วนอื่นๆของ Source code ก็ทำงานเช่นเดียวกัน
เนื่องจากเราจะตรวจสอบว่า ผู้ใช้มีการ click ที่เซลล์ ที่เราต้องการหรือไม่ เราจึงต้องเขียน โค้ดในส่วนของ Worksheet_SelectionChange เพราะเป็นส่วนที่โปรแกรม Excel ใช้เช็คว่า มีการกระทำใดๆเกิดขึ้น หรือ มีอะไรเปลี่ยนแปลงที่เซลล์ใดๆบน Worksheet หรือไม่นั่นเอง
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
เขียนโค้ดบริเวณนี้
End sub
เช่น เราต้องการตรวจสอบว่า เซลล์ A1 มีการคลิ้กหรือไม่ เราก็เขียนว่า
If (Target.Address = Range("a1").Address) Then
โค้ดที่ต้องการให้ทำเมื่อมีการคลิ้กที่เซลล์ A1
End if
สังเกตดีๆน่ะครับ...เอาละเรามาดูคำสั่งภายใน if กันว่า เราให้ทำอะไร
Range("b1").Select
With Selection.Interior
.Color = vbRed 'red color
End With
อธิบายโค้ด
Range(“b1”).Select หมายถึง ให้เลือกที่เซลล์ b1
With Selection.Interior ความหมายคือ พอมีการเลือกแล้วก็จะให้ทำ..
.Color=vbRed หมายถึง ใส่สีแดงเข้าไป (ในที่นี้คือใส่สีแดงให้เซลล์ b1)
End with จบประโยค End with
โค้ดในส่วนอื่นก็ความหมายคล้ายๆกันครับไม่ยาก
ในตัวอย่างวันนี้ เพียงแต่ต้องการให้เรารู้วิธีการตรวจสอบการคลิ้กที่ เซลล์ใดๆ ก็เท่านั้นเองครับ...ถือว่าเป็นเรื่องที่ควรจดจำเอาไปใช้ ...สำหรับใครที่ไม่ต้องการที่จะนำ Command Button ออกมาวางแล้วเขียนโค้ดให้ Command Button วิธีการตรวจสอบการคลิ้กที่เซลล์ นับเป็นวิธีการหนึ่งที่ประหยัดพื้นที่ Sheet เราไปอีกแบบครับ..
เกือบลืมไป ขั้นตอนที่ 11. สั่ง Run ให้โปรแกรมเราทำงาน แล้วลองคลิ้กที่เซลล์ A1 A2 A3 A4 A5 รวมถึง เซลล์ A6 ด้วยน่ะครับ แล้วจะเข้าใจว่าโปรแกรมทำงานอย่างไร
จากภาพด้านบน เราจะเห็นว่า เมื่อเราคลิ้กที่ เซลล์ A1 เซลล์ B1 จะกลายเป็นสีแดง, คลิ้กเซลล์ A2 เซลล์ B2 ก็จะกลายเป็น สีน้ำเงินเป็นต้น
ส่วนที่เซลล์ A6 (Reset) เมื่อเราคลิ้ก....เซลล์ B1:B5 จะกลายเป็นสีขาวตามเดิมครับ