关键字Set在VBA中实际上有什么作用?


Answers:


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)

5
VB对象引用与C指针不太相同。在VB中没有等效的“&i”。
Tomalak

10
不完全一样,不。但是足够接近,让我理解这个概念。
Treb

@Tomalak:您可以使用VarPtr()
Atmocreations,2009年

这不是一个很好的类比。就拿这个例子(VBA on the left | C on the rightDim 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;!区别发生在其他地方。
Niko O

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)

44

MSDN

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


很好找到的,但是指向您在MSDN上找到的文章的链接会更好:)
Neil Barnwell,

1
@Neil-如果您单击我的帖子中的MSDN,则该链接存在。
Galwegian

2
复制MSDN时,至少要写正确的文章。这是指VB.NET,而不是VBA。
Tomalak

1
OP正在询问VBA,尽管Set上的信息不再需要在.NET中使用是有用的,但它是一个主题,对因Object variable or With block variable not setVBA错误而到达此处的人们没有帮助:)
AJP 2012年

7
非常感谢您摘录自MSDN。其他所有答案,甚至被接受的答案都没有抓住重点。“设置”与默认属性有关。只需阅读stackoverflow.com/a/9924325/717732
quetzalcoatl 2012年


1

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


1
它不仅用于COM对象,而且用于所有对象。Galwegian解释了使用SET的主要原因。
伊克

0

因此,当您要设置值时,不需要“设置”;否则,如果要引用对象,例如工作表/范围等,则需要使用“设置”。


-1

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

例如,*以下示例显示了如何在VBA中使用Set。

昏暗的WS作为工作表

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

WS.Name =“授予”

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.