脚本中的VBA重写数组。

时间:2015-12-29 15:40:39

标签: arrays vba scripting.dictionary

我正在尝试创建一个字典,每个键都是我创建的名称,每个项目都是三个对象的数组:一个字符串,一个整数,以及一个SOAP请求结果的数组。

我像这样初始化数组:

Dim riskDict As New Scripting.Dictionary
riskDict.Add "Weight", Array("WP", 0, Array())

我有一个函数,' getTheRisk',它返回一个X by 4数组(它是一个SOAP请求。我不知道将返回多少结果,但它将返回四个值每个结果。)

我想将结果存储到字典中项目的第三个元素中,尝试如下:

For i = 0 To riskDict.count - 1
  riskDict.Items(i)(2) = getTheRisk(myDate.Value, myPort.Value, riskDict.Items(i)(0))
Next i

这编译并运行得很好,但在分配数组后,它在字典中显示为空:

enter image description here

getTheRisk函数返回如下内容:

enter image description here

如何将dict中的数组设置为SOAP请求的结果?

1 个答案:

答案 0 :(得分:0)

我找到了解决方法。我只使用两个元素初始化项目,然后在发送SOAP请求并获取结果时重新开始并添加第三个元素。我初始化如下:

Dim riskDict As New Scripting.Dictionary
riskDict.Add "Weight", Array("WP", 0)

对于我的循环:

For Each key In riskDict
  temp = riskDict(key)
  ReDim Preserve temp(UBound(temp) + 1)
  temp(UBound(temp)) = getTheRisk(myDate.Value, myPort.Value, riskDict(key)(0))
  riskDict(key) = temp
Next key

这不太理想,因为redim保留。 (而且它看起来并不优雅。)但是,这个dict只有8-10个项目,所以它不应该造成太多的性能损失。

如果您有更好的解决方案,请随时发表评论或发布。

全部谢谢!