在 VBA 上声明和定义 FileSystemObject 对象的正确方法是什么?

What is the correct way to declare and define a FileSystemObject object on VBA?

我在阅读有关如何声明 FileSystemObjects 对象的内容时发现了令人困惑的信息。是因为申报方式不同吗?

我向您展示了一些我发现的声明和定义 FileSystemOjbect 对象的方法:

  1. Dim FSO As FileSystemObject Set FSO = New FileSystemObject

  2. Dim FSO As New FileSystemObject

  3. 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://superuser.com/questions/615463/how-to-avoid-references-in-vba-early-binding-vs-late-binding/1262353?noredirect=1#comment1859095_1262353

另见

https://wordmvp.com/FAQs/InterDev/EarlyvsLateBinding.htm

https://support.microsoft.com/en-gb/help/245115/using-early-binding-and-late-binding-in-automation