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

时间:2018-04-27 11:18:05

标签: vba declare filesystemobject

我正在阅读有关如何声明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")

  4. 声明FileSystemObject对象的正确方法是什么?

1 个答案:

答案 0 :(得分:1)

所有3种方法都是正确的。您有两种使用对象的不同方法。

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

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

早期绑定: 必须链接VBA中的已用库/模块-工具-参考, 在这段时间内 Microsoft脚本运行时库 如果目标计算机上不存在模块/代码,则执行将失败。 据报道,早期结合明显更快。 早期绑定在开发过程中为对象方法和属性以及命名常量提供了Intellisense-editor建议。

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