VBA:计算表中的行(列表对象)

use*_*489 10 excel vba excel-vba

我试图在Excel中编写一些VBA,它可以将表(列表对象)的名称作为参数并返回行数.

以下工作,但不允许我传入带有表名的字符串.

MsgBox ([MyTable].Rows.Count)
Run Code Online (Sandbox Code Playgroud)

以下给出了错误:

所需对象

v_MyTable = "MyTable"
MsgBox (v_MyTable.Rows.Count)
Run Code Online (Sandbox Code Playgroud)

以下给出了错误:

对象变量或未设置块变量

v_MyTable_b = "[" & "MyTable" & "]"
MsgBox(v_MyTable_b.Rows.Count)
Run Code Online (Sandbox Code Playgroud)

我也尝试使用ListObjects,我是新手.我收到错误:

Object不支持此属性或方法

Dim tbl As ListObject
Set tbl = ActiveSheet.ListObjects("MyTable")
MsgBox(tbl.Rows.Count)
Run Code Online (Sandbox Code Playgroud)

谢谢你的帮助!

小智 19

您需要更深入地检查您正在检索的内容.

Dim tbl As ListObject
Set tbl = ActiveSheet.ListObjects("MyTable")
MsgBox tbl.Range.Rows.Count
MsgBox tbl.HeaderRowRange.Rows.Count
MsgBox tbl.DataBodyRange.Rows.Count
Set tbl = Nothing
Run Code Online (Sandbox Code Playgroud)

更多信息:

ListObject接口
ListObject.Range属性
ListObject.DataBodyRange属性
ListObject.HeaderRowRange属性

  • 相反,即使表为空,也可以使用`tbl.listrows.count`来获取行数.这不会在代码中引发任何错误 (7认同)
  • 请注意,如果表为空,`tbl.DataBodyRange.Rows.Count`会抛出错误 (2认同)

Jal*_*lal 5

你可以使用这个:

    Range("MyTable[#Data]").Rows.Count
Run Code Online (Sandbox Code Playgroud)

您必须区分具有一行数据或没有数据的表,因为前面的代码对于这两种情况都会返回“1”。使用它来测试空表:

    If WorksheetFunction.CountA(Range("MyTable[#Data]"))
Run Code Online (Sandbox Code Playgroud)