在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
抱歉没有足够的代表张贴照片: - (
答案 0 :(得分:11)
当您对变量进行Dim时,您将指定它将保留的数据类型。在创建时,在初始化之前,其值始终为Nothing
。 Set T = Application.Workbook(Bk)
将T变量初始化为Application.Workbook的特定实例,在本例中为'Bk'。
当你Dim fso as FileSystemObject
时,你基本上会说fso
会在某个时刻保持FileSystemObject
;但是,在使用Nothing
初始化它之前,它的初始值为Set fso = New FileSystemObject
。 New
关键字表示您正在创建新对象,而不是像使用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
。