我正在使用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填充新的单元格。 实际结果:我收到错误消息“编译错误:预期:列表分隔符或”。请注意,当我手动键入此代码时,该代码可以工作,但是即使看上去完全相同,但如果从剪贴板中将其粘贴也会失败。
答案 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