2013-02-07 58 views
1

我有下一個帶有許多複選框的excel表格。如何在vba中創建一種變量複選框excel

enter image description here

問題是,當我編碼我必須做一些功能與Valor1Valor2根據的,如果複選框是激活。

那麼我有代碼。

Option Explicit 

Sub Casilladeverificación1_Haga_clic_en() 

    Range("c12").Activate 

    Do 


     If CheckBox1.Value Then 
      Call fucntion1 
     'Works for the first row, but for the second row int shoul be check CheckBox12 ,a next CheckBox23 ... 

     If CheckBox2.Value Then 
      Call fucntion1 

     If CheckBox2.Value Then 
      Call fucntion3 

     .... 

    ActiveCell.Offset(1, 0).Activate 

    While Not IsEmpty(ActiveCell.Value2) 

End Sub 

但是你能注意到我不想做的所有所有的複選框的情況下,有一個解決這個喜歡複選框[I]

回答

1

我會把所有的功能放到一個大功能中,功能會被Select Case塊分隔開。

Private Sub functionRouter(checkAction as integer) 
Select Case checkAction 
     Case 1 
     'Code for function one 
     Case 2 
     'Code for function two 
     ''Etc. 
End Select 
End Sub 

您將要遍歷所有複選框。這將取決於您使用的複選框。

Sub test() 

Dim chkBox As CheckBox 
Dim chkBox2 As OLEObject 

'Regular 
For Each chkBox In Sheets("Sheet1").CheckBoxes 
    Debug.Print chkBox.Caption 
Next chkBox 

'ActiveX 
For Each chkBox2 In Sheets("Sheet1").OLEObjects 
    If TypeName(chkBox2.Object) = "CheckBox" Then 
    Debug.Print chkBox2.Object.Value 
    End If 
Next chkBox2 

你可以用你所有的複選框做一些不同的事情。您可以使用tag屬性(您將需要設置所有屬性,但這允許重複)。然後致電functionRouter(chkBox.tag)或者你可以從名稱解析東西functionRouter Right(chkBox.name, 1)

+0

這是awsome,但我現在測試,我有一些關於CheckBox和OLEObject之間的區別的問題,但我使用OLEObject,請嘗試按照該帖子,爲你我將會有更多的問題。 –

+0

好,所以你要使用'chkBox2.object.Value'和'.Name'或'.Tag'我試圖在對象瀏覽器中查找直接引用它的方式,但是我還沒有找到它。確保在嘗試訪問其某個屬性之前始終使用'.Object'。老實說,我不知道兩者之間的主要區別。一個是Excel原生的。可能對於傳統的支持ActiveX是更新的版本,可能更強大(但更難使用) – Bmo

+0

嘿我tryed與chkBox2.Object.Tag但我有**對象不支持此屬性或方法**但我是做分析'.name'的數字,如果除以11並使用這個值。 –

1

您可以通過在工作表遍歷複選框使用此循環:

For Each chk In ActiveSheet.CheckBoxes 
    MsgBox chk.Name 
Next 

但是,如果您使用ActiveX控件,它將不起作用。