Board logo

標題: [發問] 如何判斷我剛所打勾的CheckBox [打印本頁]

作者: av8d    時間: 2012-8-1 00:08     標題: 如何判斷我剛所打勾的CheckBox

For  i = 1 To  4
If Me.Controls("CheckBox" & i).Value = True

以上是判斷1~4是否有被打勾~但是他每次一定會從1開始判斷~
是否有方法讓他判斷哪一個是我剛打勾的CheckBox
作者: oobird    時間: 2012-8-1 08:06

附件示例
[attach]11973[/attach]
作者: av8d    時間: 2012-8-1 20:37

回復 2# oobird


        大大~我的意思是~我有10個CheckBox
我希望我點一下CommednBurron後將我最後一個點下的CheckBox.Caption的值丟給TextBox1
作者: GBKEE    時間: 2012-8-1 20:55

回復 3# av8d
2# oobird  附檔 物件類別模組
  1. Option Explicit
  2. Public WithEvents CheckboxGroup As MSForms.CheckBox
  3. Private Sub CheckboxGroup_Click()
  4.    '-------方法1  直接給它
  5.    UserForm1.TextBox1 = CheckboxGroup.Caption
  6.    
  7.    '-------方法2 點一下CommednBurron
  8.    '說明 UserForm1模組 需 Public xlText as  String
  9.      UserForm1.xlText = CheckboxGroup.Caption
  10.    '說明 UserForm1中 CommednBurron 程式-> UserForm1.TextBox1 = UserForm1.xlText
  11.    
  12.    'MsgBox "You Click " & CheckboxGroup.Caption & vbNewLine & _
  13.     "Value is " & CheckboxGroup.Value
  14. End Sub
複製代碼

作者: av8d    時間: 2012-8-1 21:34

回復 4# GBKEE


    G大我的意思是~我有10個CheckBox
我希望我點一下CommednBurron後
將我最後一個點下的CheckBox.Caption & CommednBurron.Caption的值丟給TextBox1

再次感謝G大在颱風天裡抽空幫助~謝謝您!

剛測試了一下~方法2會出現錯誤~我將檔案上傳如下

[attach]11987[/attach]
作者: Hsieh    時間: 2012-8-2 00:19

回復 5# av8d

稍微了解一下物件類別的流程
[attach]11992[/attach]
作者: GBKEE    時間: 2012-8-2 06:43

回復 5# av8d
我在4# 有寫是 2# oobird  附檔 物件類別模組
物件類別模組 cControlArray 程序 如下
  1. Option Explicit
  2. Public WithEvents CheckboxGroup As MSForms.CheckBox
  3. Private Sub CheckboxGroup_Click()
  4.     UserForm1.xlText = CheckboxGroup.Caption
  5. End Sub
複製代碼
UserForm1 的程式碼
  1. Public xlText As String
  2. Private Sub CommandButton1_Click()
  3.    '說明 UserForm1中 CommednBurron 程式
  4.    UserForm1.TextBox1 = UserForm1.xlText
  5. End Sub
  6. Private Sub UserForm_Initialize()
  7. Dim cCBs As Integer
  8. Dim ctl As Control
  9.    cCBs = 0
  10.    For Each ctl In Me.Controls
  11.        If TypeName(ctl) = "CheckBox" Then
  12.            cCBs = cCBs + 1
  13.            ReDim Preserve aryCBs(1 To cCBs)
  14.            Set aryCBs(cCBs).CheckboxGroup = ctl
  15.        End If
  16.    Next ctl
  17. End Sub
複製代碼
我之所以不直接上傳檔案 是希望各位多練習才會進步的
作者: av8d    時間: 2012-8-2 13:42

回復 7# GBKEE


    感謝各位老師在颱風天沒放假還來幫忙~此答案讓我學習了物件類別模組~
作者: av8d    時間: 2012-8-7 16:04

回復 7# GBKEE


    請問如果要所有UserForm~是否只能在UserForm1下新增UserForm2 ? 還是能一次宣告全部UserForm ?
作者: GBKEE    時間: 2012-8-7 16:36

回復 9# av8d

7# 是 UserForm1 的程式碼
有許多 UserForm 那在每一UserForm 程式碼中 依樣畫葫蘆寫下它自己的程式碼
作者: av8d    時間: 2012-8-8 11:19     標題: 如何複製UserForm

我想將UserForm1複製到UserForm2
作者: mark15jill    時間: 2012-8-8 11:28

因不清楚單純全部複製(格式 物件  程式碼) 還是 單一部分  故提幾點建議

方法1.  userform1 匯出後 再匯入.. (name 記得改 還有程式碼內 userform1記得改2
方法2.  userform1 複製後  userform2貼上  (物件一次 程式碼一次)
作者: av8d    時間: 2012-8-8 15:14

回復 10# GBKEE

因為只改以下~程式會錯亂!
    Private Sub CheckboxGroup_Click()
    UserForm2.xlText = CheckboxGroup.Caption
    UserForm3.xlText = CheckboxGroup.Caption
    UserForm4.xlText = CheckboxGroup.Caption
    End Sub

是否要對
xlText 和 CheckboxGroup 變數的宣告?
作者: GBKEE    時間: 2012-8-8 15:53

回復 13# av8d
要了解物件

    [attach]12050[/attach]
作者: av8d    時間: 2012-8-13 14:07

回復 14# GBKEE


    大大~請問UserForm2.xlText的值是?
作者: av8d    時間: 2012-8-13 14:29

回復 7# GBKEE
Private Sub CommandButton1_Click()
   '說明 UserForm1中 CommednBurron 程式
   UserForm1.TextBox1 = UserForm1.xlText
End Sub

UserForm1.xlText的值~目前我對應不出來~請大大解說~謝謝!
作者: av8d    時間: 2012-8-13 14:49

回復 7# GBKEE


    我在說明詳細一點~大大7樓的正式我要的需求~
但是當UserForm增加~所選取的最後一個CheckBox則無法指向到最後一次點選的~
    Private Sub CheckboxGroup_Click()
    UserForm2.xlText = CheckboxGroup.Caption
    End Sub
以上沒問題

    Private Sub CheckboxGroup_Click()
    UserForm2.xlText = CheckboxGroup.Caption
    UserForm3.xlText = CheckboxGroup.Caption
    UserForm4.xlText = CheckboxGroup.Caption
    End Sub
以上是UserForm增加後~出現了問題!
作者: GBKEE    時間: 2012-8-14 06:42

回復 17# av8d
7#  UserForm1的程式碼 是依 2# 的附檔修改
2# 的附檔中aryCBs 變數 是 Module1 的公用變數
如今你有4個UserForm 皆須私有的 aryCBs變數
  1. '4個UserForm 的 程式碼
  2. Public xlText As String
  3. Dim aryCBs()  As New cControlArray
  4. Private Sub UserForm_Initialize()
  5. Dim cCBs As Integer
  6. Dim ctl As Control
  7.    cCBs = 0
  8.    For Each ctl In Me.Controls
  9.        If TypeName(ctl) = "CheckBox" Then
  10.            cCBs = cCBs + 1
  11.            ReDim Preserve aryCBs(0 To cCBs)
  12.            Set aryCBs(cCBs).CheckboxGroup = ctl
  13.        End If
  14.    Next ctl
  15. End Sub
複製代碼

作者: c_c_lai    時間: 2012-8-14 12:18

回復 18# GBKEE
Test.rar �堭z是使用 ReDim Preserve aryCBs(1 To cCBs),
而此處您用 ReDim Preserve aryCBs(0 To cCBs)
一個是從 0 開始起算, 另一組是從 1 開始起算,
但 Test.rar  之 aryCBs(1 To  1)  (第一次) 就好像沒意義了?
請多指教!
作者: GBKEE    時間: 2012-8-14 14:38

本帖最後由 GBKEE 於 2012-8-14 14:42 編輯

回復 19# c_c_lai
一個是從 0 開始起算, 另一組是從 1 開始起算,但 Test.rar  之 aryCBs(1 To  1)  (第一次) 就好像沒意義了?
這問的好!  敬佩了 看的很仔細
ReDim Preserve aryCBs(1 To cCBs)
ReDim 陳述式 在程序層次中用來重新配置動態陣列變數的儲存空間。
  1. cCBs = cCBs + 1
  2. ReDim Preserve aryCBs(1 To cCBs) ' aryCBs(1  To 1) 只有有1元素
複製代碼
  1. cCBs = cCBs + 1
  2. ReDim Preserve aryCBs(0 To cCBs) ' aryCBs(0  To 1) 有2元素 多一元素      
複製代碼
  1. ReDim Preserve aryCBs(0 To cCBs) ' aryCBs(0  To 0)  只有有1元素
  2. cCBs = cCBs + 1    '加上1元素
複製代碼
  1. ReDim Preserve aryCBs(1 To cCBs) '  aryCBs(1  To 0)    會有錯誤
  2. cCBs = cCBs + 1
複製代碼





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