2013-07-26 57 views
1

我是Visual Basic的新手(迄今爲止2天),而且我唯一做過的其他編程是MATlab。VBA:Userform中的複選框 - 應該很簡單但不起作用

我想讓程序在Excel的不同列中打印不同的數字,具體取決於是否檢查了用戶窗體中的複選框。總共有26個複選框 - 以及一些文本框 - 我試圖使用For Each控制循環遍歷所有複選框。

我查了一些教程和一些論壇,但是當我嘗試運行測試時,代碼不起作用。更具體地說,沒有錯誤出現,但是「測試它是否工作?」不在任何地方打印。

Private Sub Add_Button_Click() 

Dim Ctrl As Control 

For Each Ctrl In DataInput.Controls 
     If TypeName(Ctrl) = "Checkbox" Then 
      If Ctrl.Value = True Then 
       Sheets("Data").Range("A1") = "Testing if it Works?" 
      End If 
     End If 
Next 

End Sub 

我已經按照相同的設置,因爲所有其他論壇或教程,我碰到過,但似乎沒有發生。任何建議表示讚賞。

+0

不管下面的答案,我想與你的代碼,唯一的問題是改變之一,如果statement'這個':'如果類型名(Ctrl)=「複選框」然後「。 '如果語句'區分大小寫... –

+0

KazJaw可能是對的,我實際上錯過了這是用戶形式完成的。我將控件放在用戶表單之外,這使得它與衆不同。 – mattboy

回答

0

編輯:這個答案只適用於將複選框直接放在Excel工作表上,而不是用戶形式的問題。隨時downvote!

我玩過它,它並不完全簡單。無論您使用表單控件還是ActiveX控件,它都有點不同。下面的代碼適用於我,雖然我不完全確定它們是最好的方法。

ActiveX控件:

Private Sub Add_Button_Click() 

For Each Ctrl In ActiveSheet.OLEObjects 
    If TypeName(Ctrl.Object) = "CheckBox" Then 
     If Ctrl.Object = True Then 
      Sheets("Data").Range("A1") = "Testing if it Works?" 
     End If 
    End If 
Next 

End Sub 

隨着窗體控件

Private Sub Add_Button_Click2() 

For Each Item In Me.Shapes 
    If Item.FormControlType = xlCheckBox Then 
     If Item.DrawingObject = 1 Then 
      Sheets("Data").Range("A1") = "Testing if it Works?" 
     End If 
    End If 
Next 

End Sub