【问题标题】:What is the correct way to declare and define a FileSystemObject object on VBA?在 VBA 上声明和定义 FileSystemObject 对象的正确方法是什么?
【发布时间】:2018-04-27 11:18:04
【问题描述】:

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

【问题讨论】:

  • 视情况而定。 1&2 需要早期绑定和引用,而 3 如果您使用后期绑定则正确。 1 将仅在 Set FSO... 行上启动 FSO,而 2 将在它被声明的那一刻启动它(即当您的子启动时)。
  • @JK2017 “后期绑定”和“早期绑定”到底是什么意思,是指将对象绑定到 FileSystemObject 对象类吗?
  • 请参阅 excelmatters.com/2013/09/23/…support.microsoft.com/en-us/help/245115/… 了解有关晚期与早期的更多信息,并且在 SO 上有很多关于此的现有问题。
  • 请注意,数字 2 使用自动实例化 stackoverflow.com/questions/21652671/…

标签: vba declare filesystemobject


【解决方案1】:

这三种方式都是正确的。您已经找到了两种使用对象的不同方法。

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-09
    • 2016-03-31
    • 1970-01-01
    相关资源
    最近更新 更多