关键字Set在VBA中究竟做了什么?

希望这是一个简单的问题,但是我很喜欢技术性的答案!

有什么区别:

i = 4 

 Set i = 4 

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

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) 

在你的情况下,它会产生一个错误。 🙂

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) 

来自MSDN :

设置关键字:在VBA中,必须使用Set关键字来区分对象的赋值和赋值对象的默认属性。 由于默认属性在Visual Basic .NET中不受支持,因此不需要Set关键字并且不再支持。

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

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

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

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

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

昏暗WS作为工作表

设置WS = ActiveWorkbook.Worksheets(“Sheet1”)

WS.Name =“Amit”