【发布时间】:2012-07-21 07:45:11
【问题描述】:
我正在尝试从 VBA 中的模块类创建新对象,但我遇到了一点困难。两行赋值代码,看起来一样,但结果不同。
我收到一条错误消息:
之后,我改用(1)而不是(2),错误已修复。
但我不明白; 他们为什么会有这种差异?
【问题讨论】:
标签: vba object variable-assignment
我正在尝试从 VBA 中的模块类创建新对象,但我遇到了一点困难。两行赋值代码,看起来一样,但结果不同。
我收到一条错误消息:
之后,我改用(1)而不是(2),错误已修复。
但我不明白; 他们为什么会有这种差异?
【问题讨论】:
标签: vba object variable-assignment
Dim 声明一个变量,Set 实例化它。
因此,在Set 之前始终使用Dim 是一个好习惯。
【讨论】:
如果您不使用Dim 来声明变量的特定类型,您可以随后将该变量更改为另一种类型,例如在之后;
set aosh = new AOSHRatioQuery
您可以将变量更改为字符串;
aosh = "A pint of milk"
由于sendAsyncRequest 方法期望AOSHRatioQuery 作为其第二个参数,并且VBA 编译器知道它不能保证aosh 变量实际上包含该类型的实例,因此违反了类型安全性& 类型不匹配错误是为了防止sendAsyncRequest接收它无法解释的垃圾。
使用Dim aosh as new AOSHRatioQuery 显式键入会告诉编译器aosh 保证始终是AOSHRatioQuery 实例或Nothing(尝试将其分配给另一种类型会引发错误),因此可以安全地传递它。
【讨论】:
在 VBA 中,您必须使用 Dim 关键字声明变量,然后使用 As 关键字定义它们的数据类型。这就是它的语法的工作原理。作为一般形式:
Dim <variableName> As <dataType>
【讨论】: