Excel Listobject table ListRows.count 对比 range.rows.count

Excel Listobject table ListRows.count vs range.rows.count

我在 Excel 中使用 listobjects,我遇到了以下问题: 每当代码为 运行 时,我都会将数据添加到 table。 以前我必须删除所有旧数据。

ThisWorkbook.Sheets("comm").ListObjects(1).DataBodyRange.Delete

之后发生的事情是我得到一个错误:

myNrofRowsinCOMM = COMMtbl.DataBodyRange.Rows.Count

我看了 没用。我还是不明白这是怎么回事。

我也尝试了以下方法:

MsgBox "COMMtbl.Range.Rows.Count:" & COMMtbl.Range.Rows.Count
MsgBox "COMMtbl.ListRows.Count:" & COMMtbl.ListRows.Count
MsgBox "COMMtbl.databodyRange.Rows.Count:" & COMMtbl.DataBodyRange.Rows.Count
If COMMtbl.Range.Rows.Count = 1 Then
    COMMtbl.ListRows.Add (1)
End If

如果 table 为空(第 headers 行和第一行为空),则第一行给出 2。因此该范围有 2 行,这看起来符合实际。 COMMtbl.Range.Rows.Count=2 第二个给出 0。我根本不明白。 COMMtbl.ListRows.Count=0 第三个给出错误 "Object variable or withblcok variable not set"

我正在尝试向 table 添加行并用数据填充它们,为此我添加一行并填充它。我想在最后添加一行,因此我每次都需要计算行数。一切都很好,除了第一个,我之前删除了 table 的全部内容,看起来像:

欢迎任何帮助

非常感谢。

我需要复习一下,所以这也可能对你有帮助:


.

.Range - Includes the Header, Insert Row and Totals Row (if visible)


.DataBodyRange
  - Contains the data area, between the Header Row and the Insert Row
  - If the ListObject doesn't have a DataBodyRange, this property returns Null


.ListRows
  - Represents all the rows of data (doesn't include Header, Total, or Insert rows)
  - To delete any items from this collection, do not use the Delete method of the item
    Use the Delete method of the range of the item to delete the item
    For example ListRows.Item(1).Range.Delete()

.

当您执行 DataBodyRange.Delete 时,table 不再有 DataBodyRange 对象,因此要确认 table 中没有包含数据的行,请替换

myNrofRowsinCOMM = COMMtbl.DataBodyRange.Rows.Count

myNrofRowsinCOMM = COMMtbl.ListRows.Count

来自 MSDN - ListObject

的更多详细信息

如果 ListObject.DataBodyRange Is Nothing 中没有数据,则无法计算行数。您可以使用 n = ListObject.Range.Rows.Count 然后 ListObject.ListRows(n).Range

获取 ListObject 的最后一行

我不知道你手头的数据是什么样的,但为了这个例子,如果你只有一列和一行,你可以将数据添加到最后一行而不用担心如果 table 是否为空,然后在您的示例中使用 .Add 方法。

Dim current_n_rows As Integer

With ThisWorkbook.Sheets("comm").ListObjects(1)
    .DataBodyRange.Delete
    current_n_rows = .ListRows.Count
    .ListRows(current_n_rows).Range.Value = NewData
    .ListRows.Add
End With

您可以将此语句环绕在您需要填充 table 的循环中。

希望对您有所帮助!干杯!