3

我在使用 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

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

关于如何进行的任何想法?我在某处读过你可以声明一个字典,说明这些项目是某个对象的,但我无法让它在 2010 年工作。这就是我能猜到的。或者一种在外壳物品出现时铸造它的方法。

4

1 回答 1

1

将对象分配给变量时,必须使用Set关键字。Set与is相反Let,它用于将值(不是对象)分配给变量。该Let关键字是可选的,几乎没有人再使用它了。

之所以有一个SetandLet是因为大多数对象都有一个默认属性——这意味着如果你引用一个没有属性的选项,它将返回存储在默认属性中的值。该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. 这给出了“对象变量或未设置块”错误,因为它试图将 Double 或 String 分配给 Range 对象变量。

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

于 2013-02-28T14:49:16.770 回答