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

标签 vba declare filesystemobject

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

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

  1. 将 FSO 调暗为 FileSystemObject 设置 FSO = 新文件系统对象

  2. Dim FSO 作为新的 FileSystemObject

  3. 将 FSO 调暗为对象 Set FSO = CreateObject("scripting.filesystemobject")

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

最佳答案

所有3种方式都是正确的。您找到了 2 种不同的对象使用方法。

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

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

早期绑定(bind): 必须在 VBA - Tools - References 中链接使用过的库/模块, 在这个时候 Microsoft Scripting Runtime 库 如果目标计算机上不存在模块/代码,则执行将失败。 据报道,早期绑定(bind)要快得多。 早期绑定(bind)在开发时提供对象方法和属性以及命名常量的 Intellisense 编辑器建议

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

关于vba - 在 VBA 上声明和定义 FileSystemObject 对象的正确方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50061264/

相关文章:

vba - 如果另一个单元格等于某个值,则使用 VBA 更改一个单元格的值

javascript - 使用VBA将数据从Excel解析到IE

common-lisp - ftype 声明对 SBCL 中的内置函数有什么影响?

bash - 如何读出动态声明的 bash 变量的值?

javascript - Scripting.Filesystemobject filemove,writefile 在 IE 浏览器中无法通过 javascript 工作(解决方法,文档?)

file - 什么时候文件不是文件系统对象?

html - 从 HTML 元素中提取数据 - VBA

Javascript 检查变量是否已声明但未赋值

javascript - 在 Mac OS 上使用 JavaScript 控制台 (JSC) 管理文件系统对象

vba - 如何为word文档中的单个单词设置样式