关键字 Set 在 VBA 中的实际作用是啥? [复制]

Posted

技术标签:

【中文标题】关键字 Set 在 VBA 中的实际作用是啥? [复制]【英文标题】:What does the keyword Set actually do in VBA? [duplicate]关键字 Set 在 VBA 中的实际作用是什么? [复制] 【发布时间】:2010-09-25 20:43:54 【问题描述】:

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

两者有什么区别:

i = 4

Set i = 4

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

【问题讨论】:

后台:***.com/a/9924325/17034 【参考方案1】:

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)

【讨论】:

VB 对象引用与 C 指针并不完全相同。并且在 VB 中没有等效的“&i”。 不完全一样,不。但足够接近让我理解这个概念。 @Tomalak:你可以使用 VarPtr() 这不是一个很好的类比。举个例子(VBA on the left | C on the right):Dim A, B As Range | Range A, B;。按照你的类比,A = B | A = B; 是正确的(它会在 C 中),但 Set A = B | A = &B; 在 VBA 中实际上是正确的(它会在 C 中失败)。在 VBA 中,A = BSet A = B 都等价于 C 的 A = B;!区别发生在其他地方。 @SamV 该死的,VBA!【参考方案2】:

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

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)

【讨论】:

【参考方案3】:

来自MSDN:

设置关键字:在 VBA 中,设置关键字 有必要区分 对象的赋值和赋值 对象的默认属性。 由于默认属性不是 在 Visual Basic .NET 中支持, 不需要设置关键字并且是 no 支持时间更长。

【讨论】:

很好,但是你在 MSDN 上找到的文章的链接会更好:) @Neil - 如果您在我的帖子中单击 MSDN,链接就在那里。 当抄袭MSDN时,至少是正确的文章。这个是指 VB.NET,而不是 VBA。 OP 正在询问有关 VBA 的问题,尽管关于 Set 不再需要在 .NET 中使用的信息很有用,但它是一个题外话,对于因Object variable or With block variable not set 错误到达这里的人没有帮助VBA :) 非常感谢您从 MSDN 中摘录。所有其他答案,即使是被接受的答案都没有抓住重点。 'set' 是关于默认属性的。只需阅读***.com/a/9924325/717732【参考方案4】:

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

【讨论】:

【参考方案5】:

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

【讨论】:

它不仅适用于 COM 对象,而且适用于所有对象。 Galwegian 解释了您使用 SET 的主要原因。【参考方案6】:

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

【讨论】:

【参考方案7】:

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

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

将 WS 调暗为工作表

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

WS.Name = "阿米特"

【讨论】:

以上是关于关键字 Set 在 VBA 中的实际作用是啥? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

excel中的vba是啥意思,如何用

从 VBA 访问串行端口的最佳方法是啥?

数据库中 DISTINCT 的作用是啥?

ZooKeeper 在 Kafka 2.1 中的实际作用是啥?

VBA代码中WHERE关键字的正确语法语法是啥

宏在电脑中是啥意思起啥作用?