【问题标题】:ListObject Returning a StringListObject 返回一个字符串
【发布时间】: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 的值,因为ValueRange 的默认属性。见:cpearson.com/excel/DefaultMember.aspx你可以使用TypeName(MyTable)来确认你的变量的类型。

标签: excel vba


【解决方案1】:

wks.ListObjects.Add(xlSrcRange, rngTable, , xlYes) 中的ListObjects 是一个集合。集合项有两个属性,一个 name 和一个 value 。在这种情况下,名称是“Table1”,因为您在创建 rngTable 后没有为其指定名称。执行 .Add 时,正在添加的集合项的名称为“Table1”,值为 rngTable 结构在内存中的地址。

当您执行 Debug.Print MyTable 时,它​​是一个集合项,它正在打印集合项的默认属性,即其名称“Table1”。

Sub TestMyFunction()
    Dim MyLO As ListObject
    Set MyLO = RangeToTable
    Debug.Print MyLO '---MyLO = "Table1"
    MyLO.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

以下链接可能会为您清除。 How do I reference tables in Excel vba?

【讨论】:

  • 我不确定我是否遵循。那么如何返回ListObject 类型的对象呢?
  • 您已经返回了一个 ListObject 项。我在答案中添加了代码,以帮助您了解代码中发生的情况。您对其进行编码的方式混淆了 ListObject 项是什么,因为您将其称为 MyTable。当您 Debug.Print 时,您打印的是 ListObject 的名称,而不是与表有关的任何内容。查看答案底部的链接。
  • 表是 ListObjects。您所做的只是更改了我的变量的名称。
猜你喜欢
  • 1970-01-01
  • 2019-11-06
  • 2019-12-06
  • 1970-01-01
  • 2012-10-15
  • 2019-10-29
  • 2012-03-30
  • 1970-01-01
  • 2012-05-25
相关资源
最近更新 更多