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

时间:2015-04-15 00:07:06

标签: excel-vba vba excel

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

以下有效,但不允许我传入带有表名的字符串。

MsgBox ([MyTable].Rows.Count)

以下是错误:

  

需要对象

v_MyTable = "MyTable"
MsgBox (v_MyTable.Rows.Count)

以下是错误:

  

对象变量或未设置块变量

v_MyTable_b = "[" & "MyTable" & "]"
MsgBox(v_MyTable_b.Rows.Count)

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

  

Object不支持此属性或方法

Dim tbl As ListObject
Set tbl = ActiveSheet.ListObjects("MyTable")
MsgBox(tbl.Rows.Count)

感谢您的帮助!

3 个答案:

答案 0 :(得分:18)

你需要更深入地检查你所检索的内容。

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

更多信息:

ListObject Interface
ListObject.Range Property
ListObject.DataBodyRange Property
ListObject.HeaderRowRange Property

答案 1 :(得分:3)

您可以使用:

    Range("MyTable[#Data]").Rows.Count

您必须区分具有一行数据或没有数据的表,因为之前的代码将返回" 1"对于这两种情况。 用它来测试一个空表:

    If WorksheetFunction.CountA(Range("MyTable[#Data]"))

答案 2 :(得分:0)

您可以使用:

Sub returnname(ByVal TableName As String)

MsgBox (Range("Table15").Rows.count)

End Sub

并调用以下函数

Sub called()

returnname "Table15"

End Sub