1

我有下一张带有许多复选框的 Excel 表格。

在此处输入图像描述

问题是当我编码时,我必须使用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

但是你可以注意到我不想用所有的复选框来做所有的情况,有一个解决这个问题的方法,比如checkbox[i]

4

2 回答 2

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)

于 2013-02-07T12:01:27.100 回答
1

您可以使用此循环迭代工作表上的复选框:

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

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

于 2013-02-07T11:42:02.650 回答