2

我正在阅读有关如何声明 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 对象的正确方法?

4

1 回答 1

2

3种方式都是正确的。您已经采用了 2 种不同的方法来使用对象。

  • 前两种方式表示“早期绑定”。
  • 最后一种方式意味着“后期绑定”。

中间方式是第一种方式的捷径,但不完全。新手 VBA 用户最好避免在复杂代码中使用,因为对对象变量的任何引用都会创建对象的新实例,如果对象变量=Nothing

早期绑定:必须在 VBA - 工具 - 参考中链接使用的库/模块,此时Microsoft Scripting Runtime Library 如果目标计算机上不存在模块/代码,则执行将失败。据报道,早期绑定明显更快。早期绑定在开发阶段提供了对象方法和属性以及命名常量的 Intellisense 编辑器建议

后期绑定:无需链接使用的外部库/模块 - 更好的机器间可移植性。据报道,后期绑定较慢。后期绑定不提供 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

于 2018-06-21T11:15:50.187 回答