For Loops в VBA с индексом в имени переменной

Я программирую макрос для SolidWorks с помощью VBA, и, поскольку это скорее синтаксический вопрос, я решил задать его здесь.

Итак, макрос, который я пишу, использует 16 флажков с именами CheckBox1, CheckBox2, ... CheckBox16.

Я устал делать это (код ниже), но произошла ошибка, так как компилятор сказал, что имя переменной «CheckBoxi» не определено.

For i = 0 To 16

    If CheckBoxi.Value Then
        'Do Something
    End If

Next For

Есть ли способ, с помощью которого я могу это исправить, я действительно не хочу печатать 16 таких утверждений, поскольку бит «Сделать что-нибудь» содержит довольно много кода. И под исправлением я имею в виду поместить его в цикл for. Спасибо!


person inevitablenature    schedule 13.05.2016    source источник
comment
Эти флажки в пользовательской форме?   -  person John Coleman    schedule 13.05.2016
comment
Спасибо @JohnColeman, у меня путаница с Excel!   -  person Abdellah OUMGHAR    schedule 13.05.2016
comment
@AlexK Поскольку Solidworks не является Access, ни в коем случае не очевидно, что это дубликат. Если флажки установлены в общей пользовательской форме, то, конечно, это дубликат, но если SolidWorks допускает встроенные элементы управления, может потребоваться ответ, который касается особенностей объектной модели Solidworks.   -  person John Coleman    schedule 13.05.2016
comment
@JohnColeman Да, это в пользовательской форме. Да, я понимаю, почему это выглядит как дубликат, но я не понимаю, как использовать код из предложенного примера и адаптировать его к моей ситуации. Например, ответ на вопрос, размещенный здесь, использует эту строку кода: Public Sub TextBoxNames(ByRef pfrm As Form)   -  person inevitablenature    schedule 13.05.2016
comment
@JohnColeman Вау, я действительно борюсь с форматированием этого комментария. Во всяком случае, я понятия не имею, что означает эта строка кода, и поиск в справке VBA слов «By Ref» и «Controls» не дал ничего полезного.   -  person inevitablenature    schedule 13.05.2016
comment
Да, Solidworks - это MSForms, поэтому ванильные пользовательские элементы управления не встраиваются в документ SW.   -  person Alex K.    schedule 13.05.2016
comment
В ответе BradC используется конструкция For i = 1 to 10 для управления циклом по имени, используйте эту замену myForm.Controls("txt_00" & i & "_Title").Text = "hello" на if myForm.Controls("CheckBox" & i) then ...   -  person Alex K.    schedule 13.05.2016
comment
@АлексК. Является ли myform именем-заполнителем для моей формы?   -  person inevitablenature    schedule 13.05.2016
comment
Да, если вы действительно делаете это внутри формы, используйте Me.controls   -  person Alex K.    schedule 13.05.2016
comment
Это работает как шарм, спасибо! :D   -  person inevitablenature    schedule 13.05.2016


Ответы (1)


me.controls("Checkbox" & I).value Где Me будет содержащей форму. Кроме того, ваш цикл начинается с 0, но в вашем посте указано 1.

person Nathan_Sav    schedule 13.05.2016