将 FSO 设置为 FileSystemObject 与 Scripting.FileSystemObject

Squ*_*ait 2 excel vba reference-library filesystemobject

我刚刚经历过这样的时刻:你走出杂草,检查你的代码,然后问自己“我为什么这么做?”

我有一个脚本,它使用FileSystemObject. 一切正常,但我想我一直在改变设置变量的方式fso

我的项目使用引用Microsoft Scripting Runtime Library,以便我可以使用早期绑定(即使我找到了几个实例Set fso = CreateObject("Scripting.FileSystemObject"),这对于这个项目来说很愚蠢)。也许是因为我的很多代码都来自在线示例,但我一直通过以下两种方式之一设置这些 fso 变量:

Set FSo = New FileSystemObject

Set FSo = New Scripting.FileSystemObject
Run Code Online (Sandbox Code Playgroud)

这些有什么区别呢?我使用哪一种很重要,还是只在某些情况下使用一种?

GSe*_*erg 7

它们之间的区别在于,后者消除了“FileSystemObject属于”Scripting和“不属于其他事物”的歧义。

如果您在该工作簿中命名了自己的类FileSystemObject,则需要后者指定您正在创建Scripting.FileSystemObject而不是Yourworkbook.FileSystemObject.

同样,如果您引用了其他一些也包含名为 的类的外部库FileSystemObject,它也会解决这种歧义。这就是为什么“添加引用”对话框中有向上/向下箭头 - 它们决定在名称冲突且编码器没有明确消除歧义的情况下哪个库获胜。

在 VBA 中需要消除歧义的常见情况是同时使用 Word 和 Excel 对象模型。两者都有一个名为 的类Range,并且您通常需要指定这次Word.Range是否需要。Excel.Range

如果您没有任何此类冲突的名称,那对您来说没有什么区别,除了可能让未来的读者更容易记住那FileSystemObject是来自 的东西Scripting