财产即使是静态的,也不会保持价值

时间:2016-08-02 08:58:59

标签: vba excel-vba excel

我经常在我的项目中使用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

我只是错误地使用它还是不打算以这种方式使用? 提前谢谢。

2 个答案:

答案 0 :(得分:3)

当应用于属性get时,

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

应该表现得像你期望的那样