Как создать переменную checkbox в vba excel

У меня есть следующий лист 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
nl ja de

2 ответы

Вы можете перебирать флажки на листе, используя этот цикл:

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

Однако, если вы используете элементы управления ActiveX , это не сработает.

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 Я попытался посмотреть в браузере объектов для способ ссылаться на него напрямую, но я еще не нашел его. Убедитесь, что вы всегда используете .Object , прежде чем пытаться перейти к одному из своих свойств. Честно говоря, я не знаю основных различий между ними. Один из них является родным для Excel. Вероятно, для старой поддержки ActiveX является более новой версией и, вероятно, более мощной (но сложнее в использовании)
добавлено автор Bmo, источник
Thats awsome, но Im тестирование сейчас, у меня есть вопрос о различиях между CheckBox и OLEObject, но я использую OLEObject, пожалуйста, попробуйте следовать за этим сообщением, для вас у меня будет больше вопросов.
добавлено автор Jonathan Raul Tapia Lopez, источник
Привет, я пробовал с chkBox2.Object.Tag, но у меня есть объект не поддерживает это свойство или метод , но я делаю, чтобы разобрать номера .name и если divide на 11 и работать с этим значением.
добавлено автор Jonathan Raul Tapia Lopez, источник