【问题标题】:VBA: Counting rows in a table (list object)VBA:计算表中的行数(列表对象)
【发布时间】:2018-08-02 04:06:46
【问题描述】:

我正在尝试在 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,这是我的新手。我得到错误:

对象不支持该属性或方法

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

感谢您的帮助!

【问题讨论】:

    标签: excel vba


    【解决方案1】:

    您需要在检索的内容中更深入。

    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

    【讨论】:

    • 注意,如果表为空,tbl.DataBodyRange.Rows.Count 会抛出错误
    • 即使表为空,也可以使用tbl.listrows.count 来获取行数。这不会在代码中引发任何错误
    【解决方案2】:

    你可以用这个:

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

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

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

    【讨论】:

    • 与 1 年多前接受的答案相比,这有何改进?
    • 好吧,很抱歉@Jalal anwser 迟到了,但我真的很高兴他发布了它!
    • [#data] 可以省略。即可以使用Range("MyTable").Rows.Count。这更好:Range("MyTable").ListObject.ListRows.Count,因为如果表没有行,它将返回 0(@Kanike 在上面的评论中提到的变体)。
    【解决方案3】:

    你可以使用:

    Sub returnname(ByVal TableName As String)
    
    MsgBox (Range("Table15").Rows.count)
    
    End Sub
    

    并调用如下函数

    Sub called()
    
    returnname "Table15"
    
    End Sub
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-12-16
      • 1970-01-01
      • 2015-01-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-25
      相关资源
      最近更新 更多