【问题标题】:How to get an object out of a collection in VBa如何从VBa中的集合中获取对象
【发布时间】:2017-06-22 13:58:04
【问题描述】:

我曾经有以下工作代码

Set result = DecodeJson(MyRequest.responseText)   
Dim keys() As String
keys = GetKeys(result.issues)

现在,我的方法发生了变化,结果不是对象,而是基于Array of class objects as class member in VBA 的集合

Dim resultsFromQueries As Collection
Set resultsFromQueries = GetAllJSonObjects(searchString) ' this calls DecodeJson(MyRequest.responseText)  as per the code snippet above

Dim i As Integer
For i = 0 To resultsFromQueries.Count
    Dim keys() As String
    Dim item As Object
    Set item = resultsFromQueries.item(i + 1)  ' I guess it's not 0 based?
    keys = GetKeys(item.result.issues)   'KABOOM

我现在遇到的问题是我不断收到以下异常

运行时错误“424”:
需要对象

在监视窗口中查看,item 显示为 Variant/String 类型,其值为 "[object Object]"

我需要投射吗?

【问题讨论】:

  • 如果是返回的对象,需要使用Set:Set item = resultsFromQueries.item(i + 1)
  • 嗨@Rory,可悲的是,同样的问题仍然存在(我已经更新了我的帖子以显示它)
  • 如果你用了Set就不可能是String,那现在是什么对象类型呢?
  • resultsfromQueriesCollection/CollectionSet item...由于上述错误消息@Rory,永远不会被执行
  • 据我所知,我认为您将在循环中遇到溢出错误。尝试; [For i = 0 To resultsFromQueries.Count - 1] 和 [Set item = resultsFromQueries.item(i)]

标签: vba excel


【解决方案1】:

几周前我遇到了这个问题,问题如下:

该集合是使用以下代码收集的:Collection.Add(OBJECT) 然而,这会导致将 Object 的值添加到 Collection 中,并且可以像离开 parathesis 一样简单地解决。Collection.add OBJECT 所以我的建议是进入GetAllJSonObjects(searchString) 函数并 搜索加法过程并确保它没有括号。 像这样,集合将包含对象而不是变体,并且您的带有 item(i+1) 的代码应该可以正常工作。

祝你好运!

【讨论】:

    猜你喜欢
    • 2021-04-08
    • 2023-03-21
    • 2014-07-11
    • 2014-02-23
    • 2014-12-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多