Return 用户窗体清单中的值

Return the value from a checklist on a UserForm

这制作了一个用户表单清单并且有效。

Sub UserForm_Initialize()

Dim LastRow     As Long
Dim i           As Long
Dim chkBox      As MSForms.CheckBox

LastRow = Worksheets("Sheet1").Cells(Rows.Count, 1).End(xlUp).Row

For i = 1 To LastRow
    Set chkBox = Me.Controls.Add("Forms.CheckBox.1", "CheckBox_" & i)
    chkBox.Caption = Worksheets("Sheet1").Cells(i, 1).Value
    chkBox.Left = 5
    chkBox.Top = 5 + ((i - 1) * 20)
Next i

End Sub

我想 select 我需要多少个框,点击一个命令按钮,然后将结果值粘贴到不同的单元格中。

例如,我在单元格 A1-A10 中有 1-10 个。第一部分为每个值 1-10 制作了一个清单。如果我选中 2、3、5 和 7 旁边的框,点击命令按钮,然后将 2、3、5 和 7 输入单元格 G2、G3、G5 和 G7。

我不知道如何让这最后一部分发生。我试着做 If 语句

Sub CommandButton1_Click()
    If chkBox1 = False Then GoTo Here
    Else
        Range("G1").Value = Me.TextBox1.Text
    End If
    Here
End Sub

我明白了

"Compile error: Variable not defined"

我尝试了不同的名称而不是“chkbox1”,但得到了同样的错误。

我想这就是你想要的。

您可以使用控件的名称引用控件,并以类似于 Initialize 代码的方式循环遍历它们。通过在 sub 之前声明“LastRow”,我们可以在两个 sub 中使用它。

Dim LastRow     As Long

Private Sub CommandButton1_Click()

Dim i As Long

For i = 1 To LastRow
    If Me.Controls("CheckBox_" & i) Then
        Range("G" & i).Value = i
    End If
Next i

End Sub

Sub UserForm_Initialize()

Dim i           As Long
Dim chkBox      As MSForms.CheckBox

LastRow = Worksheets("Sheet1").Cells(Rows.Count, 1).End(xlUp).Row

For i = 1 To LastRow
    Set chkBox = Me.Controls.Add("Forms.CheckBox.1", "CheckBox_" & i)
    chkBox.Caption = Worksheets("Sheet1").Cells(i, 1).Value
    chkBox.Left = 5
    chkBox.Top = 5 + ((i - 1) * 20)
Next i

End Sub