我正在尝试在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)
感谢您的帮助!
答案 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