3

我正在尝试从 VBA 中的模块类创建新对象,但我遇到了一点困难。两行赋值代码,看起来一样,但结果不同。

在此处输入图像描述

我收到一条错误消息:

在此处输入图像描述

之后,我改用(1)而不是(2),错误得到修复。

在此处输入图像描述

但我不明白;为什么他们会有这种差异?

4

3 回答 3

4

Dim声明一个变量,Set实例化它。

因此,始终拥有Dimbefore是一个好习惯Set

于 2012-07-23T04:06:09.580 回答
3

在 VBA 中,您必须使用 Dim 关键字声明变量,然后使用 As 关键字定义它们的数据类型。这就是它的语法的工作原理。作为一般形式:

Dim <variableName> As <dataType>
于 2012-07-23T04:03:42.420 回答
3

如果您不使用Dim来声明变量的特定类型,您可以随后将变量更改为另一种类型,例如之后;

set aosh = new AOSHRatioQuery

您可以将变量更改为字符串;

aosh = "A pint of milk"

由于该sendAsyncRequest方法期望 aAOSHRatioQuery作为其第二个参数并且 VBA 编译器知道它不能保证该aosh变量实际上将包含该类型的实例,因此违反了类型安全性并引发了类型不匹配错误以防止sendAsyncRequest接收它无法解释的垃圾。

显式键入 withDim aosh as new AOSHRatioQuery告诉编译器aosh确保始终是AOSHRatioQuery实例或Nothing(尝试将其分配给另一种类型将引发错误),因此可以安全地传递它。

于 2012-07-23T11:22:04.370 回答