Excel VBA: как перебирать флажки в зависимости от имени

Я хочу построить опрос, используя Excel и VBA. У меня есть таблица с вопросами и ответами. Когда начнется опрос, мой код выведет список ответов, переписав метки флажков в форме. Я получу их ответ и напишу их в столбце, используя значение флажка True или False.

Переменная "aRow" - это количество ответов на каждый вопрос. "lastAns" - номер строки последнего ответа. В зависимости от номера ответа некоторые флажки будут скрыты, показаны. "CheckBox1" - "CheckBox4" - это имена флажков.

Следующий код работает, но он слишком длинный, и я хочу иметь лучший метод для циклического обхода флажков и изменения их меток каждый раз. Пожалуйста, покажи мне, как это сделать! Спасибо большое!

     `lastAns = Cells(qRow, 5).End(xlDown).Row + 1
       aRow = lastAns - qRow
        If aRow >= 1 Then
            Me.CheckBox1.Visible = True
            Me.CheckBox1.Caption = Cells(qRow, 5)
            Else: Me.CheckBox1.Visible = False
        End If
        If aRow >= 2 Then
            Me.CheckBox2.Visible = True
            Me.CheckBox2.Caption = Cells(qRow + 1, 5)
            Else: Me.CheckBox2.Visible = False
            End If
        If aRow >= 3 Then
            Me.CheckBox3.Visible = True
            Me.CheckBox3.Caption = Cells(qRow + 2, 5)
            Else: Me.CheckBox3.Visible = False
            End If
        If aRow >= 4 Then
            Me.CheckBox4.Visible = True
            Me.CheckBox4.Caption = Cells(qRow + 3, 5)
            Else: Me.CheckBox4.Visible = False
            End If
               .....SAME CODE CONTINUES TILL 7...`

1 ответ

Решение

В качестве последующего ответа на мой комментарий, вот что, я думаю, вы ищете:

    arow = lastAns - qRow
    Dim i As Long, ctl As Control
    For i = 1 To 4
        Set ctl = Me.Controls("CheckBox" & i)
        If i <= arow Then
            ctl.Visible = True
            ctl.Caption = Cells(qRow + i - 1, 5)
        Else
            ctl.Visible = False
        End If
    Next i
Другие вопросы по тегам