在 VBA 上声明和定义 FileSystemObject 对象的正确方法是什么?
What is the correct way to declare and define a FileSystemObject object on VBA?
我在阅读有关如何声明 FileSystemObjects 对象的内容时发现了令人困惑的信息。是因为申报方式不同吗?
我向您展示了一些我发现的声明和定义 FileSystemOjbect 对象的方法:
Dim FSO As FileSystemObject
Set FSO = New FileSystemObject
Dim FSO As New FileSystemObject
Dim FSO As Object
Set FSO = CreateObject("scripting.filesystemobject")
声明 FileSystemObject 对象的正确方法是什么?
3种方式都正确。您已经找到了 2 种不同的对象使用方法。
- 前2种方式的意思是"Early Binding"。
- 最后一种方式表示"Late Binding".
中道是通往第一种方式的捷径,但并不完全。
新手 VBA 用户最好避免使用复杂代码,
因为对对象变量的任何引用都会创建对象的新实例,
如果对象变量=Nothing
早期绑定:
必须在 VBA - Tools - References 中链接使用过的 libraries/modules,
在这个时候 Microsoft 脚本运行时 库
如果目标计算机上不存在 module/code,则执行将失败。
据报道,早期绑定要快得多。
早期绑定在开发时提供对象方法和属性以及命名常量的 Intellisense 编辑器建议
后期绑定:
无需链接使用过的外部 libraries/modules - 更好的机器间可移植性。
据报道,后期绑定速度较慢。
后期绑定不提供 Intellisense,对象特定常量必须显式声明或由其值提供。
参见例如条件代码编译,基于项目范围的条件编译参数 Earlybinding :
Sub EarlyVsLateBindingtest()
#If Earlybinding Then
Dim oFS As Scripting.FileSystemObject
Set oFS = New Scripting.FileSystemObject
#Else
Const TemporaryFolder = 2
Dim oFS As Object
Set oFS = CreateObject("Scripting.FileSystemObject")
#End If
oFS.GetSpecialFolder (TemporaryFolder)
End Sub
另见
https://wordmvp.com/FAQs/InterDev/EarlyvsLateBinding.htm
https://support.microsoft.com/en-gb/help/245115/using-early-binding-and-late-binding-in-automation
我在阅读有关如何声明 FileSystemObjects 对象的内容时发现了令人困惑的信息。是因为申报方式不同吗?
我向您展示了一些我发现的声明和定义 FileSystemOjbect 对象的方法:
Dim FSO As FileSystemObject Set FSO = New FileSystemObject
Dim FSO As New FileSystemObject
Dim FSO As Object Set FSO = CreateObject("scripting.filesystemobject")
声明 FileSystemObject 对象的正确方法是什么?
3种方式都正确。您已经找到了 2 种不同的对象使用方法。
- 前2种方式的意思是"Early Binding"。
- 最后一种方式表示"Late Binding".
中道是通往第一种方式的捷径,但并不完全。 新手 VBA 用户最好避免使用复杂代码, 因为对对象变量的任何引用都会创建对象的新实例, 如果对象变量=Nothing
早期绑定: 必须在 VBA - Tools - References 中链接使用过的 libraries/modules, 在这个时候 Microsoft 脚本运行时 库 如果目标计算机上不存在 module/code,则执行将失败。 据报道,早期绑定要快得多。 早期绑定在开发时提供对象方法和属性以及命名常量的 Intellisense 编辑器建议
后期绑定: 无需链接使用过的外部 libraries/modules - 更好的机器间可移植性。 据报道,后期绑定速度较慢。 后期绑定不提供 Intellisense,对象特定常量必须显式声明或由其值提供。
参见例如条件代码编译,基于项目范围的条件编译参数 Earlybinding :
Sub EarlyVsLateBindingtest()
#If Earlybinding Then
Dim oFS As Scripting.FileSystemObject
Set oFS = New Scripting.FileSystemObject
#Else
Const TemporaryFolder = 2
Dim oFS As Object
Set oFS = CreateObject("Scripting.FileSystemObject")
#End If
oFS.GetSpecialFolder (TemporaryFolder)
End Sub
另见
https://wordmvp.com/FAQs/InterDev/EarlyvsLateBinding.htm
https://support.microsoft.com/en-gb/help/245115/using-early-binding-and-late-binding-in-automation