关键字“新”在VBA中有什么作用?

时间:2014-02-08 22:37:11

标签: excel vba excel-vba

在VBA过程中,我们经常在对现有对象实例的对象引用的实例化时遇到关键字。但在某些实例中,我们使用关键字New,而在其他实例中我们不使用例如:

Dim T As Excel.Workbook

Set T = Application.Workbooks(Bk)

在上面的示例No.1中,“新”关键字已被使用

Dim fso As FileSystemObject

Set fso = New FileSystemObject

在上面的示例2中,使用了关键字

为什么?请记住,我是VBA的新船,但我会尽力理解!

除此之外,我在使用/不用于声明对象引用时也会感到困惑,例如:

Dim WS As Worksheet

在上面的示例No.1中,“新”关键字已被使用

Dim myClassModule As New cl_ChartEvents

在上面的示例2中,使用了关键字

Microsoft帮助只是告诉我什么......

允许隐式创建对象的关键字。如果在声明对象变量时使用New,则在第一次引用该对象时会创建该对象的新实例,因此您不必使用Set语句来分配对象引用。

Gratz2u

亲爱的人们,只是为了深刻理解而最后的尘埃落定

Dim WS as Worksheet

Set WS = Worksheets("Sheet1")

就在这里,我们正在创建一个已经存在的对象,以便打开MS Excel(当然,例如“默认模式”),这当然是Sheet1。 由于它存在并且New关键字不可能,我们怎么能立即在一行中实例化这个对象?

4 @exantas

抱歉没有足够的代表张贴照片: - (

2 个答案:

答案 0 :(得分:11)

当您对变量进行Dim时,您将指定它将保留的数据类型。在创建时,在初始化之前,其值始终为NothingSet T = Application.Workbook(Bk)将T变量初始化为Application.Workbook的特定实例,在本例中为'Bk'。

当你Dim fso as FileSystemObject时,你基本上会说fso会在某个时刻保持FileSystemObject;但是,在使用Nothing初始化它之前,它的初始值为Set fso = New FileSystemObjectNew关键字表示您正在创建新对象,而不是像使用Set T = Application.Workbook(Bk)

那样使用现有对象初始化变量

另请注意,Set fso = FileSystemObject无效,因为它不知道您希望为其分配的FileSystemObject实例。这就是您使用New关键字创建FileSystemObject的新实例的原因。

如前所述,Dim WS As Worksheet仅告诉编译器您希望变量WS保存Worksheet对象。由于没有指定其他内容,因此在Dim点,WS设置为Nothing

Dim myClassModule As New cl_ChartEvents相当于:

Dim myClassModule as cl_ChartEvents
Set myClassModule = New cl_ChartEvents

...除了一行代码而不是两行代码。这与Dim WS As Worksheet的不同之处在于变量是立即初始化的,即myClassModule设置为cl_ChartEvents的新实例,而不是Nothing

希望这有帮助!

答案 1 :(得分:5)

你说:“我们正在通过对现有对象实例的对象引用的实例化来满足关键字New”。恰恰相反:当的某些东西尚未存在且你想要创建它时,就会使用New,并且“新”。

如果某些内容已存在,您可以省略New关键字,例如VBA中的应用程序对象, ActiveWorkbook 对象和其他对象,这是您在启动Excel时已经打开的所有内容。

Dim ... As New ...

的快捷方式
Dim ... As ...
Set ... = New ...

关于创建新工作表的最后一个问题,它由

完成
Dim WS As Worksheet
Set WS = Sheets.Add
WS.Name = "My new worksheet"

您无法使用Dim WS as New Worksheet,因为Microsoft阻止您这样做。即使您在该指令中指定了New,该对象仍然是Nothing