在VBA中关键字“New”做了什么?
在VBA程序中,我们经常遇到关键字New,通常是在实例化一个对象引用到一个现有的对象实例上。 但是在一些实例中,我们使用关键字New,而在其他实例中我们不使用例如:
Dim T As Excel.Workbook
Set T = Application.Workbooks(Bk)
在上例1中, “新”关键字尚未被使用
Dim fso As FileSystemObject
Set fso = New FileSystemObject
在上面的例子No.2中,正在使用New关键字
为什么? 请记住,我是新鲜的VBA船,但我会尽我所能理解!
除此之外,当使用/不用于声明对象引用时,我也感到困惑,例如:
Dim WS As Worksheet
在上例1中, “新”关键字尚未被使用
Dim myClassModule As New cl_ChartEvents
在上面的例子No.2中,正在使用New关键字
微软的帮助只是告诉我什么…
隐式创build对象的关键字。 如果在声明对象variables时使用New,则在首次引用对象时会创build对象的新实例,因此您不必使用Set语句来分配对象引用。
Gratz2u
亲爱的人们,为了深刻的理解,我们只是最后一次的清除
Dim WS as Worksheet
Set WS = Worksheets("Sheet1")
就在这里,我们正在创build一个已经存在的对象,以便打开MS Excel(当然在“默认模式”下可以说是Sheet1)。 既然它存在, New
关键字是不可能的,我们怎么能马上实例化这个对象呢?
4 @exantas
对不起说没有足够的代表张贴图片:-(
当你变暗一个variables时,你正在指定它将保存的数据types。 在创build的时候,它的值总是Nothing
直到你初始化它。 Set T = Application.Workbook(Bk)
将Tvariables初始化为Application.Workbook的特定实例,在这种情况下为“Bk”。
当你把Dim fso as FileSystemObject
,你基本上是说fso
会在某个时候保存一个FileSystemObject
; 但是,使用Set fso = New FileSystemObject
初始化它的初始值为Nothing
。 New
关键字意味着你正在创build一个新的对象,而不是用一个现有的对象来初始化这个variables,就像你使用Set T = Application.Workbook(Bk)
另外请注意, Set fso = FileSystemObject
将是无效的,因为它不知道您希望分配给它的FileSystemObject
实例。 这就是使用New
关键字创buildFileSystemObject的新实例的原因。
如前所述, Dim WS As Worksheet
只是告诉编译器你需要variablesWS来存放一个Worksheet对象。 由于没有其他指定,所以在Dim点,WS被设置为Nothing
Dim myClassModule As New cl_ChartEvents
相当于:
Dim myClassModule as cl_ChartEvents Set myClassModule = New cl_ChartEvents
…除了一行代码而不是两行。 这与Dim WS As Worksheet
不同之处在于variables被初始化,即myClassModule
被设置为myClassModule
的新实例,而不是Nothing
。
希望这可以帮助!
你说:“[我们]通常在实例化一个现有对象实例的对象引用时满足关键字New”。 恰恰相反的是:当有东西不存在时使用新的,你想创build它,以及“新”。
如果已经存在的话,可以省略New
关键字,例如Application对象, ActiveWorkbook对象和VBA中的其他对象,这是您在启动Excel时已经打开的所有内容。
Dim ... As New ...
是一个捷径
Dim ... As ... Set ... = New ...
对于最后一个问题来创build一个新的工作表,它是由完成
Dim WS As Worksheet Set WS = Sheets.Add WS.Name = "My new worksheet"
您不能使用Dim WS as New Worksheet
,因为Microsoft阻止您这样做。 即使在该指令中指定New
,该对象仍然是Nothing
。