Board logo

標題: [發問] 多個checkbox 控制同一個textbox [打印本頁]

作者: wenxiao    時間: 2014-4-23 16:05     標題: 多個checkbox 控制同一個textbox

小弟最近因工作需求,開始接觸EXCEL VBA,才發覺EXCEL實在是博大精深呀!!
線有一個狀況,若同時有複數個activex checkbox同時控制單一個textbox,只要其中一個checkbox有核選,textbox都會呈現相同的文字,如下圖
[attach]18127[/attach]
目前我是用最笨方法,個別針對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不行,懇請大師指教!!!
作者: GBKEE    時間: 2014-4-24 06:55

回復 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
複製代碼
[attach]18128[/attach]
作者: wenxiao    時間: 2014-4-24 09:50

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

回復 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
複製代碼

作者: wenxiao    時間: 2014-4-25 10:04

Thanks a lot!
It works!




歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)