使用VBA向Excel表中添加行

时间:2015-03-19 16:41:01

标签: excel vba excel-vba

我有一个Excel工作表(称为费用计划员 - 标准输入),上面有一个表(称为StandardInput)和一个调用VBA Sub的按钮,用于在表格的底部添加一个新行:

Public Sub AddStandardInputRow()

    Dim standardInputTable As ListObject
    Dim newRow As ListRow

    Set standardInputTable = ThisWorkbook.Worksheets("Fee Planner - Standard Input").ListObjects("StandardInput")
    Set newRow = standardInputTable.ListRows.Add

    Set standardInputTable = Nothing
End Sub

我似乎得到了运行此代码的随机结果,有时它适用于几行然后开始出错,有时它会在第一次单击按钮时出错。抛出的错误是

The object invoked has disconnected from its clients.
其次是 Application or object-defined error
我只得到第一次错误,但之后我一直得到1004错误。因此,重新启动Excel后,我立即收到第一个错误。

我猜测有一些根本原因,但我无法看清它是什么。

2 个答案:

答案 0 :(得分:0)

使用时会发生什么:

Sub M_snb()
  With Sheet1.ListObjects(1).Range
   sheet1.Cells(.Rows(.Rows.Count + 1).Row, .Columns(1).Column) = " "
  End With
End sub

答案 1 :(得分:0)

所以似乎问题出在线上

Dim newRow As ListRow
...
Set newRow = standardInputTable.ListRows.Add

newRow对象上的代码中出现了引用泄漏。

我尝试了包含

Set newRow = Nothing

在方法的倒数第二行上哪条更好但仍然不是很好,我现在完全删除了对newRow对象的所有引用,所以该方法只调用standardInputTable.ListRows.Add,这似乎是更可靠:

Public Sub AddStandardInputRow()

    Dim standardInputTable As ListObject

    Set standardInputTable = ThisWorkbook.Worksheets("Fee Planner - Standard Input").ListObjects("StandardInput")
    standardInputTable.ListRows.Add

    Set standardInputTable = Nothing
End Sub