返回列表 上一主題 發帖

[發問] 多個checkbox 控制同一個textbox

[發問] 多個checkbox 控制同一個textbox

小弟最近因工作需求,開始接觸EXCEL VBA,才發覺EXCEL實在是博大精深呀!!
線有一個狀況,若同時有複數個activex checkbox同時控制單一個textbox,只要其中一個checkbox有核選,textbox都會呈現相同的文字,如下圖
excel.png
目前我是用最笨方法,個別針對checkbox_click事件來呈現我所需要的結果,
  1. Private Sub CheckBox1_Click()
  2. If CheckBox1.Value = True Then
  3. TextBox1.Value = "click!"
  4. Else: TextBox1.Value = ""
  5. End If
  6. End Sub
  7. Private Sub CheckBox2_Click()
  8. If CheckBox2.Value = True Then
  9. TextBox1.Value = "click!"
  10. Else: TextBox1.Value = ""
  11. End If
  12. End Sub
  13. Private Sub CheckBox3_Click()
  14. If CheckBox3.Value = True Then
  15. TextBox1.Value = "click!"
  16. Else: TextBox1.Value = ""
  17. End If
  18. End Sub
  19. Private Sub CheckBox4_Click()
  20. If CheckBox4.Value = True Then
  21. TextBox1.Value = "click!"
  22. Else: TextBox1.Value = ""
  23. End If
  24. End Sub
複製代碼
但總覺得很笨,所以想用迴圈的方式來驅動,
但是用環圈我就不知道要選甚麼事件了,Workbook_change不行,懇請大師指教!!!

回復 1# wenxiao
  1. Option Explicit
  2. Public MyCheak() As New Class1
  3. Private Sub Auto_Open() 'Module1的程式碼,檔案開啟時自動執行的程序
  4.     Dim E As OLEObject, i As Integer
  5.     With Sheet1
  6.         For Each E In .OLEObjects
  7.             If E.progID = "Forms.CheckBox.1" Then
  8.                 ReDim Preserve MyCheak(0 To i)
  9.                 Set MyCheak(i).WorkCheck = E.Object
  10.                 i = i + 1
  11.             End If
  12.         Next
  13.     End With
  14. End Sub
複製代碼
物件類別模組
  1. Option Explicit
  2. Public WithEvents WorkCheck As MSForms.CheckBox
  3. Private Sub WorkCheck_Click()
  4.     'WorkCheck 有勾選 傳回True  ,沒勾選 傳回 Fales
  5.     WorkCheck.Parent.TextBox1 = IIf(WorkCheck, WorkCheck.Caption, "")
  6. End Sub
複製代碼
感恩的心......(在麻辣家族討論區.用心學習會有進步的)
但資源無限,後援有限,  一天1元的贊助,人人有能力.

TOP

GBKEE大您好
感謝您的協助,目前已參照您的代碼完成初步需求。
但現在有一個小狀況,
若核選checkbox1 與 checkbox2,textbox會出現欲顯示的字串,
但若是取消核選其中一個checkbox時,textbox的字串也會消失,
看起來應該是因為回傳了false的狀態,導致字串成完空白。
該如何調整成,只要其中一個checkbox為核選的狀態,字串就會出現,
不會因為有任何的checkbox取消核選的動作導致textbox是空的。
再請您協助,感恩!!

TOP

回復 3# wenxiao
  1. Option Explicit
  2. Public WithEvents WorkCheck As MSForms.CheckBox
  3. Private Sub WorkCheck_Click()
  4.     Dim Msg As Boolean, E As Object
  5.     'WorkCheck 有勾選 傳回True  ,沒勾選 傳回 Fales
  6.     With WorkCheck.Parent
  7.         If WorkCheck Then
  8.             .TextBox1 = WorkCheck.Name
  9.         Else
  10.             For Each E In .OLEObjects
  11.                 If E.progID = "Forms.CheckBox.1" Then
  12.                     If E.Object.Value Then Msg = True: Exit For
  13.                 End If
  14.             Next
  15.             If Msg = False Then .TextBox1 = ""
  16.         End If
  17.     End With
  18. End Sub
複製代碼
感恩的心......(在麻辣家族討論區.用心學習會有進步的)
但資源無限,後援有限,  一天1元的贊助,人人有能力.

TOP

Thanks a lot!
It works!

TOP

        靜思自在 : 人事的艱難與琢磨,就是一種考驗。
返回列表 上一主題