2010-12-01 35 views
5

Me gustaría crear una instancia de la clase que todos los demás podrían usar hasta ahora Creo cada instancia en cada clase que necesita sus métodos.Cómo crear una instancia común/compartida en vba

¿Existe alguna manera de que yo pueda crear solo una instancia que pueda ser vista por otras clases?

Normalmente podría crear algún tipo de variable estática que otros verían. Pero parece que no es posible en VBA:/

Respuesta

4

Haga el sub o la función en un Módulo y podrá acceder a él desde sus otras clases.

ModuleName.MethodName 
+0

++ y sí, es así de simple :) –

10

en un módulo:

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 

Es la aplicación VB (A) del patrón Singleton. Debe considerar cuidadosamente si es realmente apropiado o no, y si es así, esa es la manera de hacerlo. Cuando lo uso, generalmente pongo el código anterior en un Módulo por sí mismo (excepto que si estoy usando más de un Singleton en la aplicación, los pongo todos juntos en un solo Módulo). Puede agregar una rutina de destrucción al mismo módulo y lo llaman desde su salida de la aplicación:

Public Sub CloseSingleton() 

    Set objSharedClass = Nothing 

End Sub 

O puede simplemente dejar que se vaya fuera de alcance cuando la aplicación se cierra - no tan ordenado, pero nunca he visto que causa un problema (normalmente limpio, aunque ...).

EDITAR

uso (por si acaso no es obvio). O bien:

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

O:

... 
DoSomethingWith GetShared.MethodOrProperty 
... 

La primera es preferible si usted va a utilizar la clase compartido más de una vez en la rutina de llamada, pero el segundo funciona bien para una sola llamada.

Cuestiones relacionadas