将UserForm数据填充至Excel表'Database'失败,求VBA代码解决方案
UserForm数据写入Excel表问题
我已创建UserForm表单,需要将表单数据填充到名为Database的Excel工作表中。从网上复制多段VBA代码尝试实现,但均未成功,原代码如下:
Sub ResetItem() ' The reset button coding Sub Submit_Data() Dim iRow As Long If adminpanel.txtRowNumber.Value = "" Then iRow = student.Range("A" & Rows.Count).End(xlUp).Row + 1 Else iRow = adminpanel.txtRowNumber.Value End If With student.Range("A" & iRow) .Offset(0, 0).Value = "=Row()-1" .Offset(0, 1).Value = UserForm1.Doc_number.Value .Offset(0, 2).Value = UserForm1.DocDate.Value .Offset(0, 3).Value = UserForm1.Order_Number.Value .Offset(0, 4).Value = UserForm1.Fleet_number.Value .Offset(0, 5).Value = UserForm1.Maitenance_Type.Value .Offset(0, 6).Value = UserForm1.ROF.Value .Offset(0, 7).Value = UserForm1.System_Type.Value .Offset(0, 8).Value = UserForm1.Asy_Type.Value .Offset(0, 9).Value = UserForm1.Comments.Value .Offset(0, 10).Value = UserForm1.OEM.Value .Offset(0, 11).Value = UserForm1.Part_Number.Value .Offset(0, 12).Value = UserForm1.SAP_Code.Value .Offset(0, 13).Value = UserForm1.Unit.Value .Offset(0, 14).Value = UserForm1.Start_Time.Value .Offset(0, 15).Value = UserForm1.Finish_Time.Value .Offset(0, 16).Value = UserForm1.Tech01.Value .Offset(0, 17).Value = UserForm1.Tech02.Value .Offset(0, 18).Value = UserForm1.Tech03.Value .Offset(0, 19).Value = UserForm1.Distance.Value End With Call Reset_Form Application.ScreenUpdating = True MsgBox "Done" End With End Sub
原代码问题分析
- VBA不允许过程嵌套,原代码在
ResetItem里嵌套了Submit_Data,语法错误 - 目标工作表应为
Database,但代码中引用了不存在的student表 - 存在多余的
End With语句,导致语法不闭合 - 引用了未明确的
adminpanel.txtRowNumber控件,逻辑上应基于目标表计算行号 - 缺少屏幕更新控制,运行效率低
修正后的VBA代码
' 重置表单控件 Sub ResetItem() ' 根据实际表单控件补充清空逻辑 UserForm1.Doc_number.Value = "" UserForm1.DocDate.Value = "" UserForm1.Order_Number.Value = "" UserForm1.Fleet_number.Value = "" UserForm1.Maitenance_Type.Value = "" UserForm1.ROF.Value = "" UserForm1.System_Type.Value = "" UserForm1.Asy_Type.Value = "" UserForm1.Comments.Value = "" UserForm1.OEM.Value = "" UserForm1.Part_Number.Value = "" UserForm1.SAP_Code.Value = "" UserForm1.Unit.Value = "" UserForm1.Start_Time.Value = "" UserForm1.Finish_Time.Value = "" UserForm1.Tech01.Value = "" UserForm1.Tech02.Value = "" UserForm1.Tech03.Value = "" UserForm1.Distance.Value = "" End Sub ' 提交数据到Database表 Sub Submit_Data() Dim ws As Worksheet Dim iRow As Long Application.ScreenUpdating = False ' 指定目标工作表 Set ws = ThisWorkbook.Worksheets("Database") ' 获取A列最后一行的下一行作为写入行 iRow = ws.Range("A" & ws.Rows.Count).End(xlUp).Row + 1 ' 写入表单数据 With ws.Range("A" & iRow) .Offset(0, 0).Value = iRow - 1 ' 直接生成序号,替代公式 .Offset(0, 1).Value = UserForm1.Doc_number.Value .Offset(0, 2).Value = UserForm1.DocDate.Value .Offset(0, 3).Value = UserForm1.Order_Number.Value .Offset(0, 4).Value = UserForm1.Fleet_number.Value .Offset(0, 5).Value = UserForm1.Maitenance_Type.Value .Offset(0, 6).Value = UserForm1.ROF.Value .Offset(0, 7).Value = UserForm1.System_Type.Value .Offset(0, 8).Value = UserForm1.Asy_Type.Value .Offset(0, 9).Value = UserForm1.Comments.Value .Offset(0, 10).Value = UserForm1.OEM.Value .Offset(0, 11).Value = UserForm1.Part_Number.Value .Offset(0, 12).Value = UserForm1.SAP_Code.Value .Offset(0, 13).Value = UserForm1.Unit.Value .Offset(0, 14).Value = UserForm1.Start_Time.Value .Offset(0, 15).Value = UserForm1.Finish_Time.Value .Offset(0, 16).Value = UserForm1.Tech01.Value .Offset(0, 17).Value = UserForm1.Tech02.Value .Offset(0, 18).Value = UserForm1.Tech03.Value .Offset(0, 19).Value = UserForm1.Distance.Value End With Call ResetItem Application.ScreenUpdating = True MsgBox "数据提交成功!" End Sub
内容的提问来源于stack exchange,提问作者Pita Domingos
相关产品推荐
相关产品推荐

