关键字Set在VBA中实际做了什么?

Jon*_*tus 149 vba variable-assignment

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

有什么区别:

i = 4
Run Code Online (Sandbox Code Playgroud)

Set i = 4
Run Code Online (Sandbox Code Playgroud)

在VBA?我知道后者会抛出错误,但我不完全理解为什么.

Tre*_*reb 95

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)
Run Code Online (Sandbox Code Playgroud)

  • 不一样,没有.但足够让我理解这个概念. (10认同)
  • VB对象引用与C指针不完全相同.VB中没有"&i"的等价物. (5认同)

Tom*_*lak 77

在您的情况下,它会产生错误.:-)

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)
Run Code Online (Sandbox Code Playgroud)


Gal*_*ian 43

来自MSDN:

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

  • 非常感谢MSDN的摘录.所有其他答案,即使是被接受的答案也都错过了重点.'set'是关于DEFAULT PROPERTY的.请阅读http://stackoverflow.com/a/9924325/717732 (7认同)
  • @Neil - 如果您在我的帖子中单击 MSDN,链接就在那里。 (2认同)
  • 复制MSDN时,至少是正确的文章.这个是指VB.NET,而不是VBA. (2认同)
  • OP 正在询问 VBA,虽然关于 Set 不再需要在 .NET 中使用的信息很有用,但它是一个题外话,对到达这里的人没有帮助,因为 VBA 的“对象变量或块变量未设置”错误:) (2认同)

Lep*_*R64 10

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