2010-12-01 6 views
5

다른 모든 이 사용할 수있는 클래스의 인스턴스 하나를 만들고 싶습니다. 해당 메서드가 필요한 각 클래스에서 각 인스턴스를 만듭니다.vba에서 공통/공유 인스턴스를 만드는 방법

다른 클래스에서 볼 수있는 인스턴스를 하나만 만들 수있는 방법이 있습니까?

정상적으로 나는 다른 사람들이 볼 수있는 일종의 정적 변수를 만들 수 있습니다. 그러나 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 

그것은 싱글 톤 패턴의 VB (A) 구현입니다. 정말로 적절한 지 여부를주의 깊게 고려해야하며, 그렇다면 그렇게하는 것이 좋습니다. 내가 그것을 사용할 때, 나는 보통 위의 코드를 모듈 자체에 넣었다. (애플리케이션에서 둘 이상의 싱글 톤을 사용하는 경우 하나의 모듈에 모든 코드를 함께 넣는다는 것을 제외하고). 동일한 모듈에 파괴 루틴을 추가하고 응용 프로그램 출구에서 호출 할 수 있습니다 :

Public Sub CloseSingleton() 

    Set objSharedClass = Nothing 

End Sub 

또는 당신은 응용 프로그램이 닫힐 때이 범위를 벗어나 이동하도록 할 수 있습니다 - 같은 깔끔하지,하지만 난 적이 없다 그것이 문제를 일으키는 것을 보았다 (나는 보통 정리한다. ..).

편집

사용법 (단지의 경우는 분명 아니다). 다음 중 하나를

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

또는 :

... 
DoSomethingWith GetShared.MethodOrProperty 
... 

첫 번째는 당신이 호출 루틴에서 한 번 이상 공유 클래스 이상을 사용하는 거라면 바람직하지만 두 번째는 단일 통화에 대해 잘 작동합니다.

관련 문제