2016-08-02 3 views
2

多くのモジュールでFilesystemオブジェクトを頻繁に使用しており、必要なときに毎回新しいインスタンスを作成したくありません。だから私はそれが存在しない場合は、FSOに新しいFilesystemオブジェクトを割り当てるパブリックプロパティでそれを試してみました。しかし、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 

私は間違って使用していますか、この方法で使用するつもりはありませんか? ありがとうございます。

答えて

3

Staticは、内部のローカル変数にのみ適用される期待のよう

Sub Test() 
dim f as new fso 
Debug.Print f.GetTempName 
Debug.Print f.GetTempName 
Debug.Print f.GetTempName 
End Sub 

が振る舞うべき。あなたは、予想される結果を得るために、ローカル変数を使用する必要があります:試し用

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 
+0

いいね、ありがとう、Staticは完全に役に立たないとは思っていませんでした。 –

+0

清潔にしてくれたVincentに感謝します –

+0

興味深いのは、興味深いテクニックが、 –

0

このプロパティは静的に設定できますが、オブジェクトが設定されていない場合はリセットされます。あなたはプロパティのgetに適用した場合に

+0

おかげで、私は広範囲にわたり、それを使用するので、私は、各モジュール/サブにFSOを暗くするために持っていけないソリューションを、望んでいましたプロジェクト全体 –

関連する問題