You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

将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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 15:50:36