161

希望是一个简单的问题,但我非常想要一个技术性的答案!

有什么区别:

i = 4

Set i = 4

在 VBA 中?我知道后者会抛出错误,但我不完全明白为什么。

4

7 回答 7

102

set用于分配对对象的引用。C等价物是

 int i;
int* ref_i;

i = 4; // Assigning a value (in VBA: i = 4)
ref_i = &i; //assigning a reference (in VBA: set ref_i = i)
于 2008-12-08T14:00:24.203 回答
81

在您的情况下,它将产生错误。:-)

Set分配一个对象引用。对于所有其他赋值,(隐式、可选和很少使用的)Let语句是正确的:

Set object = New SomeObject
Set object = FunctionReturningAnObjectRef(SomeArgument)

Let i = 0
Let i = FunctionReturningAValue(SomeArgument)

' or, more commonly '

i = 0
i = FunctionReturningAValue(SomeArgument)
于 2008-12-08T13:57:56.783 回答
47

来自MSDN

Set 关键字: 在 VBA 中,Set 关键字是区分对象赋值和对象默认属性赋值所必需的。由于 Visual Basic .NET 不支持默认属性,因此不需要且不再支持 Set 关键字。

于 2008-12-08T13:58:45.707 回答
10

Set 用于设置对象引用,而不是分配值。

于 2008-12-08T13:57:41.527 回答
1

在我的脑海中,Set 用于将 COM 对象分配给变量。通过执行 Set 我怀疑它在引擎盖下正在对对象执行 AddRef() 调用以管理它的生命周期。

于 2008-12-08T13:59:49.260 回答
0

所以当你想设置一个值时,你不需要“设置”;否则,如果您指的是一个对象,例如工作表/范围等,您需要使用“设置”。

于 2014-09-05T07:37:42.890 回答
-1

Set 是一个关键字,它用于分配对 VBA 中对象的引用。

例如,*下面的例子展示了如何在 VBA 中使用 Set。

将 WS 调暗为工作表

设置 WS = ActiveWorkbook.Worksheets("Sheet1")

WS.Name = "阿米特"

于 2013-11-11T05:05:59.870 回答