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

Excel กับการตอบสนองต่อการคลิ้กของเซลล์

Excel กับการตอบสนองต่อการคลิ้กของเซลล์ Cell click Event on Excel เราทราบดีว่า Excel มี Control ที่ตอบสนองต่อการคลิ้กอยู่ 2 แบบ แบบแร... thumbnail 1 summary

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 ด้วยน่ะครับ แล้วจะเข้าใจว่าโปรแกรมทำงานอย่างไร


จากภาพด้านบน เราจะเห็นว่า เมื่อเราคลิ้กที่ เซลล์ A1 เซลล์ B1 จะกลายเป็นสีแดง, คลิ้กเซลล์ A2 เซลล์ B2 ก็จะกลายเป็น สีน้ำเงินเป็นต้น

ส่วนที่เซลล์ A6 (Reset) เมื่อเราคลิ้ก....เซลล์ B1:B5 จะกลายเป็นสีขาวตามเดิมครับ