在VBA过程中,我们经常遇到关键字New,通常是在实例化对现有对象实例的对象引用时。但是,在一些实例化中,我们使用关键字New,而在其他实例化中,我们不使用关键字,例如:
Dim T As Excel.Workbook
Set T = Application.Workbooks(Bk)
在上面的示例1中,使用了"New"关键字有而不是
Dim fso As FileSystemObject
Set fso = New FileSystemObject
在上面的示例2中,使用了New关键字
为什么要这样?记住,我是新的船在VBA,但我会尽我最大的努力去理解!
此外,在声明对象引用时使用/不使用时,我也会感到困惑,例如:
Dim WS As Worksheet
在上面的示例1中,使用了"New"关键字有而不是
Dim myClassModule As New cl_ChartEvents
在上面的示例2中,使用了New关键字
微软的帮助什么都没告诉我..。
关键字,该关键字支持隐式创建对象。如果在声明对象变量时使用New,则会在第一次引用对象时创建对象的新实例,因此不必使用Set语句来分配对象引用。
Gratz2u
亲爱的人,只是最后的灰尘,为了深入的理解。
Dim WS as Worksheet
Set WS = Worksheets("Sheet1")
在这里,我们创建了一个已经存在的对象,以便打开MS (例如,在“默认模式”中),当然是Sheet1。既然New 存在,并且关键字是不存在的,那么我们如何立即在一行中实例化这个对象呢?
4 @exantas
对不起,没有足够的代表贴出图片:
发布于 2014-02-08 22:56:04
当您创建一个变量时,您指定的是它将包含的数据类型。在创建时,它的值始终是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保存工作表对象。由于没有指定任何其他内容,因此在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。
希望这能有所帮助!
发布于 2014-02-08 23:05:55
您说过:“我们通常在实例化对象引用到现有对象实例时遇到关键字New”。事实正好相反:当某些东西还不存在时,就会使用New,而您想要创建它,那么“新的”。
如果某个东西已经存在,您可以省略New关键字,例如VBA中的Application、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,因为微软阻止您这样做。即使在该指令中指定了New,该对象仍然是Nothing。
https://stackoverflow.com/questions/21652671
复制相似问题