Excel 将数据输入工作表的命令按钮

Excel 将数据输入工作表的命令按钮,excel,vba,Excel,Vba,我希望你们假期后都过得很好。我有个小问题。我创建了一个包含多个条目的用户表单,用户可以将数据输入到工作表中,但是,设置命令按钮将数据输入到工作表中有点困难 守则: Private Sub cmdAdd_Click() 'Copy input values to sheet. Dim rw As Integer Dim ws As Worksheet Set ws = Worksheets("Sheet1") lRow = ws.Cells(Rows.Count, 1).End(xlUp).Off

我希望你们假期后都过得很好。我有个小问题。我创建了一个包含多个条目的用户表单,用户可以将数据输入到工作表中,但是,设置命令按钮将数据输入到工作表中有点困难

守则:

Private Sub cmdAdd_Click()
'Copy input values to sheet.
Dim rw As Integer
Dim ws As Worksheet
Set ws = Worksheets("Sheet1")
lRow = ws.Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).Row
With ws
    .Cells(3Row, 3).Value = Me.txtDate.Value
    .Cells(ERow, 4).Value = Me.cboType.Value
    .Cells(FRow, 5).Value = Me.cboDesciption.Value
    .Cells(GRow, 6).Value = Me.txtIncomeAmount.Value
    .Cells(HRow, 7).Value = Me.txtExpensesAmount.Value
    .Cells(IRow, 7).Value = Me.txtComment.Value
    End With
    'Clear Input Controls.
    Me.txtDate = ""
    Me.cboType = ""
    Me.cboDesciption = ""
    Me.txtIncomeAmount = ""
    Me.txtExpensesAmount = ""
    Me.txtComment = ""

我几乎没有编码知识,到目前为止,我一直在网上学习很多不同的教程。任何帮助或指导都将不胜感激。:)提前谢谢

使用
lRow
作为
.Cells()
参数的行引用。试试下面的潜艇

Private Sub cmdAdd_Click()
'Copy input values to sheet.
Dim rw As Integer
Dim ws As Worksheet
Set ws = Worksheets("Sheet1")
lRow = ws.Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).Row
With ws
    .Cells(lRow, 3) = Me.txtDate
    .Cells(lRow, 4) = Me.cboType
    .Cells(lRow, 5) = Me.cboDesciption
    .Cells(lRow, 6) = Me.txtIncomeAmount
    .Cells(lRow, 7) = Me.txtExpensesAmount
    .Cells(lRow, 8) = Me.txtComment
End With

    'Clear Input Controls.
    Me.txtDate = ""
    Me.cboType = ""
    Me.cboDesciption = ""
    Me.txtIncomeAmount = ""
    Me.txtExpensesAmount = ""
    Me.txtComment = ""
End Sub
#EIDT

对于表格,您需要找到特定列的最后一个空单元格。根据附件,您需要找到
B列
表示
日期
列的最后一个空单元格。因此,请使用以下代码为您的工作表工作

Private Sub cmdAdd_Click()
'Copy input values to sheet.
Dim rw As Integer
Dim ws As Worksheet
Dim lrow As Long
Dim LO As ListObject
Dim LEO As Range

Set ws = Worksheets("2020_Data")
Set LO = ws.ListObjects("Table2")
'lrow = ws.Cells(Rows.Count, "B").End(xlUp).Offset(1, 0).Row

With LO.Range.Columns(2)
    Set LEO = .Find(what:="", after:=.Cells(1), LookIn:=xlValues, _
        searchorder:=xlByRows, searchdirection:=xlNext)
    If Not LEO Is Nothing Then
        lrow = LEO.Row
'        MsgBox LEO.Row 'First empty row at column B
    End If
End With

'rw = ws.Cells.Find(What:="*", SearchOrder:=xlRows, SearchDirection:=xlPrevious, LookIn:=xlValues).Row + 1
With ws
    .Cells(lrow, "B") = Me.txtDate
    .Cells(lrow, "E") = Me.cboType
    .Cells(lrow, "F") = Me.cboDesciption
    .Cells(lrow, "G") = Me.txtIncomeAmount
    .Cells(lrow, "H") = Me.txtExpensesAmount
    .Cells(lrow, "I") = Me.txtComment
End With

    'Clear Input Controls.
    Me.txtDate = ""
    Me.cboType = ""
    Me.cboDesciption = ""
    Me.txtIncomeAmount = ""
    Me.txtExpensesAmount = ""
    Me.txtComment = ""
End Sub

你想在这里干什么
.Cells(3Row,3)
-
3Row
应该是该行的数值,而不是其他数值。您的代码哪里有问题?要指定单元格,请使用单元格([行],[列])语法。因此.Cells(lRow,3).Value=Me.txtDate.Value。这将把C列中的日期(由其编号3指示)放在代码标识为lRow的最后一行。在代码表顶部添加Option Explicit。宣布暗淡的lRow为长。rw似乎是多余的。请注意,lRow由第1列(=A)的长度决定,但新行不会写入第A列。您好,Harun24HR,谢谢您的回答!!我已将您的代码复制到工作表中,但是,出于某种原因,我收到了一条“运行时错误9,下标超出范围”的消息。您对此有什么建议吗?对不起,这是一条“Set ws=Worksheets”(“Sheet1”)。我刚刚将代码运行到我的pc上,发现没有问题。是否有名为Sheet1的工作表?检查工作簿中的工作表名称。哦,我知道我错在哪里了。哈哈。。。。。谢谢虽然那个错误已经消失了,但是现在数据并没有被输入到工作表中:(@new11)你能通过google drive或dropbox共享你的示例工作簿并在这里放置链接进行查看吗?代码应该对我有用。