หน้าเว็บ

วันอาทิตย์ที่ 16 ตุลาคม พ.ศ. 2554

การควบคุม Option Button ที่สร้างขึ้นเองด้วย VBA

ปกติแล้ว Excel มี Option Button ให้เลือกใช้อยู่เรียบร้อยแล้วไม่จำเป็นต้องสร้างขึ้นมาใหม่แต่อย่างใด แต่หากต้องการจะสร้างขึ้นมาเองเพื่อสามารถกำหนดคุณสมบัติต่าง ๆ ยกตัวอย่างเช่นการใส่สี ตีเส้น แรเงา หรือทำเป็นรูปแบบ 3 มิติ เพื่อความสวยงามก็สามารถทำได้ครับ

ตัวอย่างที่จะนำเสนอต่อไปนี้เป็นการวาด Object วงรี (Oval) แล้วกำหนดความกว้างและความสูงให้เท่ากันเพื่อเป็นวงกลม (ซึ่งจะขอเรียกชื่อเป็นวงรีเช่นเดิม) โดยมีชื่อ Oval 7, Oval 9, Oval 8, Oval 10 และ Oval 14 ตามลำดับ โดยมีชื่อในช่วงเซลล์ A4:A8 กำกับวงรีแต่ละวงดังนี้

  1. Oval 7: CO (เซลล์ A4)
  2. Oval 9: A (เซลล์ A5)
  3. Oval 8: FTA (เซลล์ A6)
  4. Oval 10: D (เซลล์ A7)
  5. Oval 14: E (เซลล์ A8)

โดยมีเงื่อนไขว่าเมื่อเลือกวงรีใดแล้ว

  1. ให้วงรีนั้นกลายเป็นสีแดง
  2. และวงรีอื่น ๆ ไม่มีสี
  3. ให้เซลล์ C10 แสดงค่าในเซลล์ A4:A8 ที่ตรงกับวงรีนั้น ๆ

ตัวอย่างภาพการใช้งาน Option Button ที่สร้างขึ้นเองด้วย Oval Object

OptionButton

เราสามารถใช้ VBA Code ตามด้านล่างมาช่วยในการทำงานดังกล่าวได้ครับ โดยต้อง Assign Macro ให้กับวงรีแต่ละวงดังนี้

  1. Oval 7: ObjCo
  2. Oval 9: ObjA
  3. Oval 8: ObjFTA
  4. Oval 10: ObjD
  5. Oval 14: OjbE

Option Explicit

Dim objg As Object
Dim obj As Object

Sub SelectObj(One As Object, Grp As Object)
With One.Fill
.ForeColor.RGB = RGB(255, 0, 0)
End With
Grp.Fill.ForeColor.RGB = RGB(255, 255, 255)
If One.Fill.Visible Then
Select Case One.Name
Case "Oval 14"
Range("C10") = "E"
Case "Oval 7"
Range("C10") = "CO"
Case "Oval 9"
Range("C10") = "A"
Case "Oval 8"
Range("C10") = "FTA"
Case Else
Range("C10") = "D"
End Select
Else
Range("C10") = ""
End If


End Sub

Sub ObjCo()
Set obj = ActiveSheet.Shapes("Oval 7")
Set objg = ActiveSheet.Shapes.Range( _
Array("Oval 14", "Oval 9", "Oval 8", "Oval 10"))
SelectObj obj, objg
End Sub

 

Sub ObjA()
Set obj = ActiveSheet.Shapes("Oval 9")
Set objg = ActiveSheet.Shapes.Range( _
Array("Oval 7", "Oval 14", "Oval 8", "Oval 10"))
SelectObj obj, objg
End Sub



Sub ObjFTA()
Set obj = ActiveSheet.Shapes("Oval 8")
Set objg = ActiveSheet.Shapes.Range( _
Array("Oval 7", "Oval 14", "Oval 9", "Oval 10"))
SelectObj obj, objg
End Sub



Sub ObjD()
Set obj = ActiveSheet.Shapes("Oval 10")
Set objg = ActiveSheet.Shapes.Range( _
Array("Oval 7", "Oval 14", "Oval 9", "Oval 8"))
SelectObj obj, objg
End Sub



Sub ObjE()
Set obj = ActiveSheet.Shapes("Oval 14")
Set objg = ActiveSheet.Shapes.Range( _
Array("Oval 7", "Oval 9", "Oval 10", "Oval 8"))
SelectObj obj, objg
End Sub

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