標題:
[發問]
多個checkbox 控制同一個textbox
[打印本頁]
作者:
wenxiao
時間:
2014-4-23 16:05
標題:
多個checkbox 控制同一個textbox
小弟最近因工作需求,開始接觸EXCEL VBA,才發覺EXCEL實在是博大精深呀!!
線有一個狀況,若同時有複數個activex checkbox同時控制單一個textbox,只要其中一個checkbox有核選,textbox都會呈現相同的文字,如下圖
[attach]18127[/attach]
目前我是用最笨方法,個別針對checkbox_click事件來呈現我所需要的結果,
Private Sub CheckBox1_Click()
If CheckBox1.Value = True Then
TextBox1.Value = "click!"
Else: TextBox1.Value = ""
End If
End Sub
Private Sub CheckBox2_Click()
If CheckBox2.Value = True Then
TextBox1.Value = "click!"
Else: TextBox1.Value = ""
End If
End Sub
Private Sub CheckBox3_Click()
If CheckBox3.Value = True Then
TextBox1.Value = "click!"
Else: TextBox1.Value = ""
End If
End Sub
Private Sub CheckBox4_Click()
If CheckBox4.Value = True Then
TextBox1.Value = "click!"
Else: TextBox1.Value = ""
End If
End Sub
複製代碼
但總覺得很笨,所以想用迴圈的方式來驅動,
但是用環圈我就不知道要選甚麼事件了,Workbook_change不行,懇請大師指教!!!
作者:
GBKEE
時間:
2014-4-24 06:55
回復
1#
wenxiao
Option Explicit
Public MyCheak() As New Class1
Private Sub Auto_Open() 'Module1的程式碼,檔案開啟時自動執行的程序
Dim E As OLEObject, i As Integer
With Sheet1
For Each E In .OLEObjects
If E.progID = "Forms.CheckBox.1" Then
ReDim Preserve MyCheak(0 To i)
Set MyCheak(i).WorkCheck = E.Object
i = i + 1
End If
Next
End With
End Sub
複製代碼
物件類別模組
Option Explicit
Public WithEvents WorkCheck As MSForms.CheckBox
Private Sub WorkCheck_Click()
'WorkCheck 有勾選 傳回True ,沒勾選 傳回 Fales
WorkCheck.Parent.TextBox1 = IIf(WorkCheck, WorkCheck.Caption, "")
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
Option Explicit
Public WithEvents WorkCheck As MSForms.CheckBox
Private Sub WorkCheck_Click()
Dim Msg As Boolean, E As Object
'WorkCheck 有勾選 傳回True ,沒勾選 傳回 Fales
With WorkCheck.Parent
If WorkCheck Then
.TextBox1 = WorkCheck.Name
Else
For Each E In .OLEObjects
If E.progID = "Forms.CheckBox.1" Then
If E.Object.Value Then Msg = True: Exit For
End If
Next
If Msg = False Then .TextBox1 = ""
End If
End With
End Sub
複製代碼
作者:
wenxiao
時間:
2014-4-25 10:04
Thanks a lot!
It works!
歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)