vba - 关键字 'New' 在 VBA 中起什么作用?

标签 vba excel

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

将 T 调暗为 Excel.Workbook

设置 T = Application.Workbooks(Bk)

在上面的示例 1 中,“New” 关键字被使用

将 fso 调暗为 FileSystemObject

设置 fso = 新 FileSystemObject

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

为什么呢?请记住,我对 VBA 很陌生,但我会尽力理解!

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

将 WS 调暗为工作表

在上面的示例 1 中,“New” 关键字被使用

将 myClassModule 调暗为新的 cl_ChartEvents

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

Microsoft 帮助什么也没告诉我...

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

格拉茨2u

亲爱的人们,只是为了深入了解而进行的最后一次除尘

将 WS 调暗为工作表

设置 WS = Worksheets("Sheet1")

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

4 @exantas

抱歉,没有足够的代表来发布图片:-(

最佳答案

当您调暗变量时,您正在指定它将保存的数据类型。在创建时,其值始终为 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 的新实例而不是 什么都没有

希望这有帮助!

关于vba - 关键字 'New' 在 VBA 中起什么作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21652671/

相关文章:

vba - 从excel填充word文档而不删除书签

ms-access - 可以使用 VBA 更改的 Access 启动属性是什么

python - 如何在不删除 Python 中的其余部分的情况下将信息添加到 Excel 工作表?

excel - VBA - 花括号 {} 等效操作

c# - 在 C# 中等待 Excel Interlop 退出

excel - 在 Excel 中创建自定义查找函数时遇到问题。匹配和连接范围的问题

excel - 如何使用 VBA 将文件上传到 OneDrive Business (Sharepoint)

excel - 间接的替代方案

vba - 为什么IsNumeric (“1.23D45”)返回True?

excel - Cells.Find() 引发 "Runtime Error 91: Object Variable or With Block Not Set"