gpt4 book ai didi

class - Excel VBA : Extract custom class from dictionary

转载 作者:行者123 更新时间:2023-12-04 18:10:18 27 4
gpt4 key购买 nike

我在使用 VBA Excel 2010 时遇到问题。我制作了一个名为“Enclosure”的自定义类,创建了它的一个实例并将其添加到字典中。
然后我可以遍历键以确保它已被添加。
我在提取外壳类时遇到了麻烦。这是我的提取子代码:

Sub AddEnclosureItem(sItemToAdd As String, ByRef rdEnclosures As Scripting.Dictionary, dDebug As Boolean)

Dim TempEnclosure As Enclosure ' hold enclosure we pull

TempEnclosure = rdEnclosures(1)

End Sub

当我尝试编译时,我得到“未设置对象变量或 block 变量”

关于如何进行的任何想法?我在某个地方读过,你可以声明一个字典,说明项目属于某个对象,但我无法在 2010 年让它工作。这就是我所能猜测的。或者在外壳元素出来时转换它的方法。

最佳答案

当您将对象分配给变量时,您必须使用 Set 关键字。 Set的对立面是Let,它用来给变量赋值(不是对象)。 Let 关键字是可选的,几乎没有人再使用它了。

之所以有 SetLet 是因为大多数对象都有一个默认属性 - 这意味着如果您引用一个没有属性的选项,它将返回存储的值在默认属性中。 Value 属性是一个常见的默认属性。这个

x = Range("A1")

和这个一样

x = Range("A1").Value

和这个一样

Let x = Range("A1").Value

任何一个都可以接受(尽管我更喜欢第二个)。如果 x 是 Double 或 String,那很好,但如果 x 是 Range 对象变量,则需要使用 Set

Set x = Range("A1")

如果省略 Set 关键字,VBA 会假定您需要 Let 并尝试将(默认)Value 属性分配给 x。这给出了“对象变量或未设置 block ”错误,因为它试图将 Double 或 String 分配给 Range 对象变量。

您的自定义类模块可能没有默认值,所以这些都不重要。但确实如此。即使没有默认值,也必须使用 Set 来引用对象。

关于class - Excel VBA : Extract custom class from dictionary,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15135379/

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