【发布时间】:2017-10-07 20:17:00
【问题描述】:
我想从函数返回 ListObject,但它似乎隐式地将其转换为字符串。我很困惑。有人能指出我做错了什么吗?
Sub TestMyFunction()
Dim MyTable As ListObject
Set MyTable = RangeToTable
Debug.Print MyTable '---MyTable = "Table1"
MyTable.Unlist
End Sub
Private Function RangeToTable() As ListObject
Dim wks As Worksheet
Set wks = ActiveWorkbook.Worksheets(sREPORT_DATA_1)
Dim rngTable As Range
Set rngTable = wks.Range("A1").CurrentRegion
Set RangeToTable = wks.ListObjects.Add(xlSrcRange, rngTable, , xlYes)
End Function
【问题讨论】:
-
不确定你的意思。
Address属性会返回对应范围的字符串。 -
@SJR 很抱歉让您感到困惑。我稍微编辑了我的帖子。当我只打印
MyTable时,它会将Table1打印为字符串。但我需要返回一个表对象,而不是表名。我对 VBA 的了解正在进步,但我可能不理解某些内容。 -
确实如此,因此您可以使用 Unlist 方法。你到底想达到什么目标?
-
@SJR 我想为表对象设置一个自定义类的实例。我的类初始化事件添加表并通过属性设置
ListObject类型的私有模块化变量。当我实例化类时,我想将类属性 = 设置为MyTable。 -
Debug.Print MyTable打印 MyTable 的 默认属性 的值 - 在本例中为Name,即“Table1”。这类似于您使用(例如)Range对象得到的结果:Debug.Print Range("A1")将打印来自 A1 的值,因为Value是Range的默认属性。见:cpearson.com/excel/DefaultMember.aspx你可以使用TypeName(MyTable)来确认你的变量的类型。