在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初始化它的初始值为NothingNew关键字意味着你正在创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