gpt4 book ai didi

vba - 使用索引/项目编号循环遍历 Scripting.Dictionary

转载 作者:行者123 更新时间:2023-12-03 07:16:34 26 4
gpt4 key购买 nike

类似于this issue ,在 VBA 中使用 Scripting.Dictionary 对象时,以下代码的结果是意外的。

Option Explicit

Sub test()

Dim d As Variant
Dim i As Integer
Dim s As String
Set d = CreateObject("Scripting.Dictionary")

d.Add "a", "a"
Debug.Print d.Count ' Prints '1' as expected

For i = 1 To d.Count
s = d.Item(i)
Debug.Print s ' Prints ' ' (null) instead of 'a'
Next i

Debug.Print d.Count ' Prints '2' instead of '1'

End Sub

使用从零开始的索引,可以获得相同的结果:

For i = 0 To d.Count - 1
s = d.Item(i)
Debug.Print s
Next i

观察该对象,我实际上可以看到它有两个项目,新添加的键是 1,从 i 添加。如果我将此循环增加到更高的数量,则字典中的项目数量就会增加,每个循环一次。

我已经在 Office/VBA 2003、2010 和 2013 中对此进行了测试。所有版本都表现出相同的行为,我预计其他版本 (2007) 也会如此。

我可以使用其他循环方法解决这个问题,但是当我尝试存储对象并在 s = d.Item 上收到对象预期错误时,这让我措手不及。 (i) 行。

郑重声明,我知道我可以做这样的事情:

For Each v In d.Keys
Set o = d.item(v)
Next v

但我更好奇为什么我似乎无法按数字迭代项目。

最佳答案

根据the documentation of the Item property :

Sets or returns an item for a specified key in a Dictionary object.

就您而言,您没有 key 为 1 的项目,因此:

s = d.Item(i)

实际上在您的字典中创建了一个新的键/值对,并且该值为空,因为您尚未使用可选的 newItem 参数。

词典还有 Items method它允许循环索引:

a = d.Items
For i = 0 To d.Count - 1
s = a(i)
Next i

关于vba - 使用索引/项目编号循环遍历 Scripting.Dictionary,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11296522/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com