2010-12-01 18 views
5

他のすべてのクラスを作成したいと考えています。 はこれまで使用できましたが、そのメソッドを必要とする各クラスで各インスタンスを作成します。vbaで共通/共用インスタンスを作成する方法

他のクラスには1つのインスタンスしか作成できない方法がありますか。

通常私は他の人に見られるような静的変数を作成することができました。 しかし、VBAでは不可能と思われます。/

答えて

4

モジュール内でサブまたは関数を作成すると、他のクラスからアクセスすることができます。モジュール内の

ModuleName.MethodName 
+0

++とそれは簡単です:) –

10

Private objSharedClass As myClass 

Public Function GetShared() As myClass 

    If objSharedClass Is Nothing Then 
     Set objSharedClass = New myClass 
    End If 

    Set GetShared = objSharedClass 

End Function 

それはSingletonパターンのVB(A)の実装です。それが本当に適切かどうかを慎重に検討する必要があります。もしそうなら、それがそれを行う方法です。私はそれを使用するとき、私は通常、モジュール内に上記のコードを入れます(ただし、アプリケーションで複数のシングルトンを使用している場合は、それらをすべて1つのモジュールにまとめます)。あなたは、同じモジュールに破壊ルーチンを追加し、アプリケーションの終了からそれを呼び出すことができます。

Public Sub CloseSingleton() 

    Set objSharedClass = Nothing 

End Sub 

それとも、ただアプリを閉じたときに、それはスコープの外に手放すことができます - として整頓ませんが、私は決してきませんそれは問題を引き起こすのを見ました(私は通常、クリーンアップを行います...)。

EDIT

使い方(念のため、それは明らかではありません)。次のいずれかの

... 
Set objLocalCopy = GetShared 
DoSomethingWith objLocalCopy.MethodOrProperty 
... 

または:

... 
DoSomethingWith GetShared.MethodOrProperty 
... 

あなたは、呼び出し元のルーチンで何度も共有クラス以上を使用するつもりなら最初は好ましいが、第二は、単一の呼び出しのために正常に動作します。

関連する問題