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