Vba 传递现有FileSystemObject或创建多个实例
我有几个使用FileSystemObject的过程。我觉得很方便 问题:将FileSystemObject的现有实例作为参数从“main”过程传递给这些其他过程,而不是让每个过程创建自己的FileSystemObject实例,是否明智 示例:这样做是否更好:Vba 传递现有FileSystemObject或创建多个实例,vba,vbscript,filesystemobject,Vba,Vbscript,Filesystemobject,我有几个使用FileSystemObject的过程。我觉得很方便 问题:将FileSystemObject的现有实例作为参数从“main”过程传递给这些其他过程,而不是让每个过程创建自己的FileSystemObject实例,是否明智 示例:这样做是否更好: Sub MainSub() Dim FSO : Set FSO = CreateObject("Scripting.FileSystemObject") Call OtherSub(FSO, myargs) ' ca
Sub MainSub()
Dim FSO : Set FSO = CreateObject("Scripting.FileSystemObject")
Call OtherSub(FSO, myargs)
' call other subs and functions that use FileSystemObject
End Sub
Sub OtherSub(FSO, myargs)
' Do stuff with FSO
' call other subs and functions that use FileSystemObject
End Sub
我见过至少一个程序员这样做,而不是我通常做的以下事情:
Sub MainSub()
Dim FSO : Set FSO = CreateObject("Scripting.FileSystemObject")
Call OtherSub(myargs)
' call other subs and functions that use FileSystemObject
End Sub
Sub OtherSub(myargs)
Dim FSO : Set FSO = CreateObject("Scripting.FileSystemObject")
Call OtherSub(myargs)
' Do stuff with FSO
' call other subs and functions that use FileSystemObject
End Sub
我可以看到执行前者的想法,因为这可能会减少与拥有多个FileSystemObject实例相关的开销。但每次都要把《金融服务条例》作为一个论据通过,这似乎非常麻烦。说真的,开销真的那么大吗?在我看来,创建许多FSO的开销不是问题;但是“您不应该重复自己”和每个
CreateObject(“System.FileSystemObject”)
[oops]都会增加运行时错误的风险。在后台,只有一个文件系统和一个文件系统对象,因此如果允许C/C++程序员使用STDOUT或cerr,VBScript/VBA程序员有权使用globalFSO(你不能对一个单独的FSO做任何事,改变它在其他子系统/函数中的工作-除了转换保持变量).我更喜欢在类中封装东西,而不是在子对象之间传递参数
Set c = New MyClass
c.MainSub
Class MyClass
Dim fso
Sub Class_Initialize
Set fso = CreateObject("Scripting.FileSystemObject")
End Sub
Sub Class_Terminate
Set fso = Nothing
End Sub
Public Sub MainSub()
OtherSub myargs
' call other subs and functions that use fso
' or use fso here
End Sub
Public Sub OtherSub myargs
' Do stuff with fso here or call another sub in the class
End Sub
End Class
.我最近做过类似的事情,我个人更喜欢尽可能使用单个文件系统对象。我认为它是在函数之间传递文件句柄,而函数又会写入打开的文件句柄 定义函数/子函数时,请确保使用
ByRef
关键字传递文件系统对象
唯一不可接受的情况是,如果您在文件层次结构中导航,并且需要FSO维护相同的目录。然而,应该注意的是,在今天的计算机中,单个FSO的内存需求可以忽略不计,只有在需要使用递归函数或重复调用创建/销毁这些对象的函数时,您才会注意到性能的提高