Excel VBA:如何基于名称

时间:2016-08-17 08:04:21

标签: excel vba loops checkbox userform

我想使用excel和vba构建调查。我有一张问答表。调查开始时,我的代码将通过覆盖复选框来列出答案。表格上的标签。我将通过使用复选框的True或False值来获取他们的答案并将其写在一列中。

变量" aRow"是每个问题的答案数。 " lastAns"是最后一个答案的行号。根据答案的数量,将隐藏一些复选框,如图所示。 " CheckBox1"到#34; 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 个答案:

答案 0 :(得分:2)

作为对我评论的后续回答,我认为您正在寻找:

    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