我经常在我的项目中使用Filesystemobject,在很多模块中,我不想在每次需要的时候实例化它。所以我尝试了一个Public属性,它将一个新的Filesystemobject分配给FSO,如果它不存在的话。但是每次执行Property Get时,FSO都不会被新实例化。
Public Static Property Get FSO() As Object
If FSO Is Nothing Then
Set FSO = CreateObject("Scripting.Filesystemobject")
End If
End Property
Sub Test()
'at every line, the FSO is created again instead of using the old
Debug.Print FSO.GetTempName
Debug.Print FSO.GetTempName
Debug.Print FSO.GetTempName
Debug.Print FSO.GetTempName
Debug.Print FSO.GetTempName
Debug.Print FSO.GetTempName
End Sub
我只是错误地使用它还是不打算以这种方式使用? 提前谢谢。
答案 0 :(得分:3)
Static仅适用于内部局部变量。您必须使用局部变量来获得预期结果:
Public Static Property Get FSO() As Object
Dim fso_obj As Object
If fso_obj Is Nothing Then
Set fso_obj = CreateObject("Scripting.FileSystemObject")
End If
Set FSO = fso_obj
End Property
答案 1 :(得分:0)
属性可以是静态的,但如果对象不是,则重置。
Sub Test()
dim f as new fso
Debug.Print f.GetTempName
Debug.Print f.GetTempName
Debug.Print f.GetTempName
End Sub
应该表现得像你期望的那样