我正在尝试从VBA中的模块类创建新对象,我有一个小难题。两行分配代码,看起来一样,但结果不同。
我收到一条错误消息:
之后,我切换到使用(1)而不是(2),错误被修复。
但我不明白; 他们为什么会有这种差异?
答案 0 :(得分:4)
Dim
声明一个变量,Set
实例化它。
因此,在Dim
之前始终拥有Set
是一种很好的做法。
答案 1 :(得分:3)
在VBA中,您必须使用Dim关键字声明变量,然后使用As关键字定义其数据类型。这就是它的语法是如何工作的。作为一般形式:
Dim <variableName> As <dataType>
答案 2 :(得分:3)
如果您不使用Dim
声明变量的特定类型,则可以随后将变量更改为其他类型,例如;之后;
set aosh = new AOSHRatioQuery
您可以将变量变为字符串;
aosh = "A pint of milk"
由于sendAsyncRequest
方法需要AOSHRatioQuery
作为其第二个参数&amp; VBA编译器知道它不能保证aosh
变量实际上包含该类型的实例,类型安全性被违反&amp;引发类型不匹配错误,以防止sendAsyncRequest
收到无法解释的垃圾。
使用Dim aosh as new AOSHRatioQuery
显式输入告诉编译器aosh
始终为AOSHRatioQuery
实例或Nothing
(尝试将其分配给其他类型会引发错误)所以它可以安全通过。