vbaで一種の変数チェックボックスを作成するにはどうすればいいですか?

次のExcelシートには多くのチェックボックスがあります。

enter image description here

問題は私がチェックボックスが有効になっているかどうかに応じて、 Valor1 Valor2

私はコードを持っています。

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

But you can notice I dont want to made all the case with all the checkbox, there is a solve for this like checkbox[i]

1

2 答え

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

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

しかし、 ActiveX コントロールを使用すると動作しません。

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

You could do a few different things with all of your checkboxes. You could use the tagproperty (you would need to set all of them, but this allows for duplicates). Then call functionRouter(chkBox.tag) Or you could parse something from the name functionRouter Right(chkBox.name, 1)

1
追加された
それで、 chkBox2.object.Value .Name または .Tag を使って、それを直接参照する方法ですが、まだ見つかりませんでした。そのプロパティの1つに到達する前に常に .Object を使用するようにしてください。正直なところ私は両者の主な違いは分かりません。 1つはExcelにネイティブです。おそらくレガシーサポートのために、ActiveXはより新しいバージョンであり、おそらくより強力です(しかし、使用するのは難しいでしょう)
追加された 著者 Bmo,
私はCheckBoxとOLEObjectの違いについていくつかの質問がありますが、私はOLEObjectを使っています。その投稿をフォローしようとしてください。あなたにはもっと質問があります。
追加された 著者 Jonathan Raul Tapia Lopez,
ちょっとchkBox2.Object.Tagで試してみましたが、オブジェクトがこのプロパティまたはメソッドをサポートしていませんが、 .name の数を解析するために、この値で作業してください。
追加された 著者 Jonathan Raul Tapia Lopez,