对于重复的VBA输入表单(例如100个复选框,其中填充了100个单元格),有没有办法自动生成代码?

时间:2019-05-17 18:06:54

标签: excel vba checkbox userform

我正在使用Excel和VBA创建人员及其爱好/技能的数据库。我已经创建了一个用户表单,用户可以在其中输入他们的名字(到nameTextBox中),部门(deptTextBox),然后从150个列表中勾选他们具有的技能。

如果用户单击表单上的“保存并关闭”命令按钮,则其数据应填充Excel电子表格。复选框对应于“ True”或“ False”。但是,有这么多,我想知道是否有可能自动生成此代码(或找到一种更简单的编码方法)。

我在Excel中编写了一个公式来自动生成这些代码行。但是,如果我将其粘贴到VBA中,代码将显示为红色,并且出现错误消息“编译错误:预期:列表分隔符或”。

我尝试先将其粘贴到记事本或写字板中,然后再粘贴到VBA中,但是遇到相同的错误。即使代码和字符看起来与我输入的内容完全相同,也会发生这种情况-如果键入,它会起作用,如果我将其复制粘贴,它会失败。

“如果用户单击“保存并关闭”,我想将其数据保存在Sheet3的下一个可用行中,然后关闭表单

    Dim lRow As Long
    Dim ws As Worksheet
    Set ws = Worksheets("Sheet3")
    lRow = ws.Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).Row
        With ws
            .Cells(lRow, 1).Value = nameTextBox.Value
            .Cells(lRow, 2).Value = deptTextBox.Value
            .Cells(lRow, 3).Value = notesTextBox.Value

            ' This next bit adds all the skills as TRUE (checkbox ticked) or FALSE (unticked). There are 150, so I'm wondering if I can generate this code automatically rather than write it all by hand!

            .Cells(lRow, 5).Value = CheckBox1.Value
            .Cells(lRow, 6).Value = CheckBox2.Value
            .Cells(lRow, 7).Value = CheckBox3.Value
            .Cells(lRow, 8).Value = CheckBox4.Value
            .Cells(lRow, 9).Value = CheckBox5.Value
            .Cells(lRow, 10).Value = CheckBox6.Value
            .Cells(lRow, 11).Value = CheckBox7.Value
            .Cells(lRow, 12).Value = CheckBox8.Value
            .Cells(lRow, 13).Value = CheckBox9.Value
            .Cells(lRow, 14).Value = CheckBox10.Value
            .Cells(lRow, 15).Value = CheckBox11.Value
            .Cells(lRow, 16).Value = CheckBox12.Value
            .Cells(lRow, 17).Value = CheckBox13.Value
            .Cells(lRow, 18).Value = CheckBox14.Value
            .Cells(lRow, 19).Value = CheckBox15.Value
            .Cells(lRow, 20).Value = CheckBox16.Value
            .Cells(lRow, 21).Value = CheckBox17.Value
            .Cells(lRow, 22).Value = CheckBox18.Value
            .Cells(lRow, 23).Value = CheckBox19.Value
            .Cells(lRow, 24).Value = CheckBox20.Value
            .Cells(lRow, 25).Value = CheckBox21.Value
            'And so on, until....
            .Cells (1Row, 151).Value = Checkbox148.Value

预期结果:保存用户窗体后,每个复选框将使用TRUE或FALSE填充新的单元格。 实际结果:我收到错误消息“编译错误:预期:列表分隔符或”。请注意,当我手动键入此代码时,该代码可以工作,但是即使看上去完全相同,但如果从剪贴板中将其粘贴也会失败。

1 个答案:

答案 0 :(得分:0)

您可以使用循环执行以下操作:

    Dim lRow As Long, n As Long
    Dim ws As Worksheet
    Set ws = Worksheets("Sheet3")
    lRow = ws.Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).Row

    With ws.Rows(lRow)
            .Cells(1).Value = nameTextBox.Value
            .Cells(2).Value = deptTextBox.Value
            .Cells(3).Value = notesTextBox.Value

            For n = 1 to 150
                .Cells(4 + n).Value = Me.Controls("CheckBox" & n).Value
            Next n