Excel VBA:如何通过基于名称的checkbox循环

我想用excel和vba来build立一个调查。 我有一个问题和答案表。 调查开始后,我的代码将通过覆盖表单上checkbox的标签来列出答案。 我将获取他们的答案,并通过使用checkbox的True或False值将它们写入列中。

variables“aRow”是每个问题的答案数。 “lastAns”是最后一个答案的行号。 根据答案的数量,一些checkbox将被隐藏,显示。 “CheckBox1”到“CheckBox4”是checkbox的名称。

下面的代码工作,但它太长,我想有一个更好的方法循环通过checkbox,并每次更改他们的标签。 请告诉我如何做到这一点! 非常感谢!

`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...` 

作为对我的评论的后续回答,以下是我认为您正在寻找的内容:

  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