vba - 向 Excel 表格添加新行(VBA)

标签 vba excel

我有一个Excel,可以记录您在特定日期和膳食中摄入的食物。我有一个网格,其中每行代表您吃的食物,它含有多少糖等。

然后我添加了一个保存按钮,将所有数据保存到另一个工作表中的表中。

这是我尝试过的

    Public Sub addDataToTable(ByVal strTableName As String, ByRef arrData As Variant)
    Dim lLastRow As Long
    Dim iHeader As Integer
    Dim iCount As Integer

    With Worksheets(4).ListObjects(strTableName)
        'find the last row of the list
        lLastRow = Worksheets(4).ListObjects(strTableName).ListRows.Count

        'shift from an extra row if list has header
        If .Sort.Header = xlYes Then
            iHeader = 1
        Else
            iHeader = 0
        End If
    End With

    'Cycle the array to add each value
    For iCount = LBound(arrData) To UBound(arrData)
        **Worksheets(4).Cells(lLastRow + 1, iCount).Value = arrData(iCount)**
    Next iCount
End Sub

但我在突出显示的行上不断收到相同的错误:

Application-defined or object-defined error

我做错了什么?

提前致谢!

最佳答案

您没有说明您使用的是哪个版本的 Excel。这是为 2007/2010 年编写的(Excel 2003 需要不同的方法)

您也没有说明如何调用 addDataToTable 以及您要传递给 arrData 的内容。
我猜您正在传递一个基于 0 的数组。如果是这种情况(并且表格从 A 列开始),则 iCount 将从 0.Cells(lLastRow + 1、iCount) 将尝试引用无效的列 0

您也没有利用ListObject。您的代码假设 ListObject1 位于第 1 行开始。如果不是这种情况,您的代码会将数据放置在错误的行中。

这是利用 ListObject 的替代方案

Sub MyAdd(ByVal strTableName As String, ByRef arrData As Variant)
    Dim Tbl As ListObject
    Dim NewRow As ListRow

    ' Based on OP 
    ' Set Tbl = Worksheets(4).ListObjects(strTableName)
    ' Or better, get list on any sheet in workbook
    Set Tbl = Range(strTableName).ListObject
    Set NewRow = Tbl.ListRows.Add(AlwaysInsert:=True)

    ' Handle Arrays and Ranges
    If TypeName(arrData) = "Range" Then
        NewRow.Range = arrData.Value
    Else
        NewRow.Range = arrData
    End If
End Sub

可以通过多种方式调用:

Sub zx()
    ' Pass a variant array copied from a range
    MyAdd "MyTable", [G1:J1].Value
    ' Pass a range
    MyAdd "MyTable", [G1:J1]
    ' Pass an array
    MyAdd "MyTable", Array(1, 2, 3, 4)
End Sub

关于vba - 向 Excel 表格添加新行(VBA),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12297738/

相关文章:

sql - 如何在不打开Excel工作表的情况下刷新Excel中的SQL连接

excel - 警告用户空单元格并根据前列中的值指示位置

vba - GetElementsbyClassname:开放 IE 与 MSXML2 方法

vba - Excel VBA运行时错误1004对象_worksheet的方法范围失败

Excel VBA : inserting formula into a cell gives Run-time error '1004'

excel - 如何在excel的两列中排列重复的条目?

vba - 具有 IF 或 Select Case 的 Excel UDF 具有更好的性能

regex - 如何将字符串中的确切单词与正则表达式匹配?

vba - 在 VBA 中查找字典对象的大小

excel - 运行时错误 1004。选择无效,有几个可能的原因