为什么必须使用Set来保存对象?

时间:2016-11-14 02:48:12

标签: vba

在处理我的PowerPoint宏时,我注意到以下内容:

获取当前活动幻灯片:

Dim currSlide As Slide
Set currSlide = Application.ActiveWindow.View.Slide

获取新创建的文本框:

Dim textbox As Shape
Set textbox = currSlide.Shapes.AddTextbox(...)

我是VBA的新手,曾经使用过Java,C ++和... C#。为什么必须在上面使用Set?为什么使用Slide& Shape会产生错误吗?在这方面,VBA在变量声明的工作方式上有何不同?

1 个答案:

答案 0 :(得分:2)

这取自Byte Comb - Values and References in VBA

  

在VBA中,通过在分配引用时要求使用关键字Set,可以明确显示值类型和引用类型之间的差异。此外,您经常会看到分配一个称为“绑定”的引用。

Byte Comb详细介绍了VBA的互操作性。我强烈建议任何认真使用VBA进行编程的人都会通过它阅读。

用外行的术语:使用Set,以便编译器知道编程想要一个变量引用一个Object类型。这样,当您尝试为对象赋值时,编译器将知道抛出错误。

另一个原因是对象可以有默认值。

在这个例子中,我有一个名为value的变量,它是Variant类型。变体可以是VBA中的任何类型。请注意编译器如何知道在value = Range("A1")时分配Range的值,并在Set中使用关键字Set value = Range("A1")时设置对Range的引用。

enter image description here