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

しかし、あなたは私がすべてのチェックボックスですべてのケースを作りたくないことに気付くことができます、チェックボックス[i]のようなこれに対する解決策があります

4

2 に答える 2

1

このループを使用して、ワークシートのチェックボックスを繰り返すことができます。

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

ActiveXただし、コントロールを使用すると機能しません。

于 2013-02-07T11:42:02.650 に答える
1

すべての関数を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 に答える