将 FSO 设置为 FileSystemObject 与 Scripting.FileSystemObject
Setting FSO to FileSystemObject vs Scripting.FileSystemObject
我刚刚经历过这样的时刻之一,你走出杂草,检查你的代码并问自己“我为什么要那样做?”
我有一个脚本可以使用 FileSystemObject
创建一个包含多个子文件夹和文件的文件夹。一切正常,但我想我一直在改变设置 fso
变量的方式。
我的项目使用 Microsoft Scripting Runtime Library
引用,这样我就可以使用早期绑定(尽管我发现了几个 Set fso = CreateObject("Scripting.FileSystemObject"
的实例),这对于这个项目来说很愚蠢)。可能是因为我的很多代码都来自在线示例,但我一直以两种方式之一设置这些 fso 变量:
Set FSo = New FileSystemObject
Set FSo = New Scripting.FileSystemObject
这些有什么区别?我使用哪种重要,还是只在某些情况下使用?
它们之间的区别在于后者消除了 FileSystemObject
属于 Scripting
而不是其他东西的歧义。
如果您在该工作簿中有自己的 class 命名为 FileSystemObject
,后者将需要指定您正在创建 Scripting.FileSystemObject
而不是 Yourworkbook.FileSystemObject
。
同样,如果您引用了一些其他外部库,该库也具有名为 FileSystemObject
的 class,它也可以解决该歧义。这就是为什么在“添加引用”对话框中有 up/down 个箭头 - 它们决定在名称冲突的情况下哪个库获胜,并且编码器没有明确消除歧义。
VBA 中需要消除歧义的常见情况是同时使用 Word 和 Excel 对象模型。两者都有一个叫做Range
的class,你经常需要指定这次你想要Word.Range
还是Excel.Range
。
如果您没有任何此类冲突的名称,这对您来说没有任何区别,除了可能让将来 reader 更容易回忆起 FileSystemObject
是那个东西来自 Scripting
.
我刚刚经历过这样的时刻之一,你走出杂草,检查你的代码并问自己“我为什么要那样做?”
我有一个脚本可以使用 FileSystemObject
创建一个包含多个子文件夹和文件的文件夹。一切正常,但我想我一直在改变设置 fso
变量的方式。
我的项目使用 Microsoft Scripting Runtime Library
引用,这样我就可以使用早期绑定(尽管我发现了几个 Set fso = CreateObject("Scripting.FileSystemObject"
的实例),这对于这个项目来说很愚蠢)。可能是因为我的很多代码都来自在线示例,但我一直以两种方式之一设置这些 fso 变量:
Set FSo = New FileSystemObject
Set FSo = New Scripting.FileSystemObject
这些有什么区别?我使用哪种重要,还是只在某些情况下使用?
它们之间的区别在于后者消除了 FileSystemObject
属于 Scripting
而不是其他东西的歧义。
如果您在该工作簿中有自己的 class 命名为 FileSystemObject
,后者将需要指定您正在创建 Scripting.FileSystemObject
而不是 Yourworkbook.FileSystemObject
。
同样,如果您引用了一些其他外部库,该库也具有名为 FileSystemObject
的 class,它也可以解决该歧义。这就是为什么在“添加引用”对话框中有 up/down 个箭头 - 它们决定在名称冲突的情况下哪个库获胜,并且编码器没有明确消除歧义。
VBA 中需要消除歧义的常见情况是同时使用 Word 和 Excel 对象模型。两者都有一个叫做Range
的class,你经常需要指定这次你想要Word.Range
还是Excel.Range
。
如果您没有任何此类冲突的名称,这对您来说没有任何区别,除了可能让将来 reader 更容易回忆起 FileSystemObject
是那个东西来自 Scripting
.