標題:
多選CheckBox的VBA怎麼寫?
[打印本頁]
作者:
maikoyuki
時間:
2012-11-21 17:53
標題:
多選CheckBox的VBA怎麼寫?
在一個儲存格裡放著CheckBox所選取的項目,並用 , 隔開,請問這段VBA是怎麼寫?謝謝!
[attach]13226[/attach]
作者:
Hsieh
時間:
2012-11-21 19:46
回復
1#
maikoyuki
Private Sub CommandButton1_Click()
Dim Ct As OLEObject
For Each Ct In Me.OLEObjects
If Ct.progID = "Forms.CheckBox.1" Then
If Ct.Object.Value = True Then mystr = IIf(mystr = "", Ct.Object.Caption, mystr & "," & Ct.Object.Caption)
End If
Next
[B11] = mystr
End Sub
Private Sub CommandButton2_Click()
For Each Ct In Me.OLEObjects
If Ct.progID = "Forms.CheckBox.1" Then
Ct.Object.Value = False
End If
Next
[B11] = ""
End Sub
複製代碼
作者:
stillfish00
時間:
2012-11-21 20:20
回復
2#
Hsieh
不好意思 , 想請教一下
Me.OLEObjects 是不是指該工作表的所有ActiveX控制項? 不含表單控制項?
還有 Ct.progID = "Forms.CheckBox.1"
控制項的progID要怎麼得知 ? ".1" 有特別意義嗎?
其他的控制項也是同樣格式嗎?
作者:
Hsieh
時間:
2012-11-21 20:38
回復
3#
stillfish00
沒錯不包含表單控制項
因為是在工作表中按鈕的程序,所以ME就是指該工作表
progID可選取該物件後,看編輯列中的刮號內文字
[attach]13227[/attach]
作者:
stillfish00
時間:
2012-11-21 20:49
回復
4#
Hsieh
謝謝版大開示~
作者:
maikoyuki
時間:
2012-11-22 07:05
回復 maikoyuki
Hsieh 發表於 2012-11-21 19:46
謝謝大哥解答,順便請問一下,如果工作表中有很多個Forms.CheckBox.1、Forms.TextBox.1、Forms.OptionButton.1、Forms.ListBox.1、Forms.ComboBox.1等要把它們全變成空值,代碼應該如何簡單的寫?謝謝!
作者:
c_c_lai
時間:
2012-11-22 08:35
回復
4#
Hsieh
請問 Hsieh 版大, 表單控制項只能設定在 UserForm 內嗎?
Private Sub UserForm_Click()
Dim Ct As Control, mystr As String
For Each Ct In Me.Controls
If TypeName(Ct) = "CheckBox" Then
If Ct.Value = True Then mystr = IIf(mystr = "", Ct.Caption, mystr & "," & Ct.Caption)
End If
Next
Sheet1.[B12] = mystr
End Sub
複製代碼
如果將以上語法應用在 工作表單 Sheet1 本身內的話, 他會出現 "找不到方法或資料成員",
請您賜教,謝謝!
作者:
Hsieh
時間:
2012-11-22 10:44
回復
7#
c_c_lai
2#程式碼適用於工作表內ActiveX控制項
請注意所謂表單控制項跟ActiveX控制項的區別
[attach]13231[/attach]
作者:
c_c_lai
時間:
2012-11-22 11:44
回復
8#
Hsieh
我指的是:
[attach]13232[/attach]
[attach]13233[/attach]
謝謝您!
作者:
GBKEE
時間:
2012-11-22 14:15
本帖最後由 GBKEE 於 2012-11-22 16:51 編輯
回復
9#
c_c_lai
Me.
Controls
->UserForm表單(MSForms)的控制項物件集合
Me.
OLEObjects
->工作表中的控制項物件集合
作者:
Hsieh
時間:
2012-11-22 15:19
Sub ex() '讀取勾選之表單CheckBox控制項
Dim Sp As Shape
For Each Sp In ActiveSheet.Shapes
If Sp.FormControlType = xlCheckBox Then
If Sp.ControlFormat.Value = 1 Then mystr = IIf(mystr = "", Sp.TextFrame.Characters.Text, mystr & "," & Sp.TextFrame.Characters.Text)
End If
Next
MsgBox mystr
End Sub
Sub ex1() '取消勾選CheckBox
Dim Sp As Shape
For Each Sp In ActiveSheet.Shapes
If Sp.FormControlType = xlCheckBox Then
Sp.ControlFormat.Value = False
End If
Next
End Sub
複製代碼
回復
9#
c_c_lai
作者:
Hsieh
時間:
2012-11-22 15:38
回復
6#
maikoyuki
Sub 清除控制項的值()
Dim Ct As OLEObject, k
For Each Ct In Me.OLEObjects
k = Ct.Object.Value
Ct.Object.Value = IIf(TypeName(k) = "Boolean", False, IIf(TypeName(k) = "String", "", Null))
Next
End Sub
複製代碼
作者:
c_c_lai
時間:
2012-11-22 15:45
回復
10#
GBKEE
謝謝您的說明,學習VBA快一年了,到目前為止我幾乎沒使用過 ActiveX 控制項,
譬如下圖所示,我都是使用表單控制項處理,為何可以呢?難道在工作表單上一定
要使用 OLEObject 物件嗎?
[attach]13235[/attach]
作者:
c_c_lai
時間:
2012-11-22 16:13
回復
11#
Hsieh
終於 OK 了,謝謝 Hsieh 版大的解惑,在判斷 xlCheckBox 之前尚需先行過濾 Ct 的型態;
If Ct.Type = msoFormControl Then ~ End If ,否則會產生錯誤訊息。
在 UserForm 內之 Ct.Caption 亦如 Hsieh 版大的範例一併須修改成 Ct.TextFrame.Characters.Text 。
Sub Test2()
Dim Ct As Shape, mystr As String
For Each Ct In Me.Shapes
If Ct.Type = msoFormControl Then
If Ct.FormControlType = xlCheckBox Then
If Ct.ControlFormat.Value = 1 Then mystr = IIf(mystr = "", Ct.TextFrame.Characters.Text, mystr & "," & Ct.TextFrame.Characters.Text)
End If
End If
Next
Sheet1.[B12] = mystr
End Sub
複製代碼
再次謝謝您等的指導!
作者:
stillfish00
時間:
2012-11-22 16:39
整理一下 , 有錯請幫我指正~
表單上的控制項 :
使用"表單"的Controls遍歷 ,
找特定類型用TypeName檢查
工作表上的activeX控制項 :
使用"工作表"的OLEObjects遍歷 ,
找特定類型用progID檢查
工作表上的表單控制項 :
在"工作表"的shapes中 , Type = msoFormControl 的 shape ,
控制項屬性在shape.ControlFormat下 ,
找特定類型用shape.FormControlType檢查
作者:
c_c_lai
時間:
2012-11-22 17:45
回復
15#
stillfish00
附上圖表,你便更易瞭解了。
[attach]13236[/attach]
[attach]13237[/attach]
作者:
maikoyuki
時間:
2012-11-23 16:28
回復 12# Hsieh
執行上出現錯誤,'438' , 物件不支援此屬性或方法。
作者:
maikoyuki
時間:
2012-11-23 16:31
To Hsieh大:
一個後續問題,就是現在可以把要選取的東西放在儲存格上,那麼如果想要在這個儲存格上查詢有多少個選取了的項目,把它顯示在 [B13]以下的儲存格,每一個項目 佔一個儲存格,這個代碼如何處理?謝謝!
作者:
sppchad
時間:
2012-12-11 22:54
回復
1#
maikoyuki
雖然目前還不能下載來看看,但還是謝謝你
作者:
cake1234
時間:
2016-12-5 17:06
好詳細的講解,受益良多
歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)