2010-12-01 4 views
5

Я хотел бы создать один экземпляр класса, который все остальные могут использовать до сих пор. Я создаю каждый экземпляр в каждом классе, который нуждается в его методах.Как создать общий/общий экземпляр в vba

Есть ли способ создать только один экземпляр, который будет отображаться другими классами.

Normaly Я мог бы создать какую-то статическую переменную, которая будет видна другими. Но это не представляется возможным в VBA:/

ответ

4

Сделайте подфункцию или функцию в модуле, и вы сможете получить к ней доступ из других классов.

ModuleName.MethodName 
+0

++ и да, это так просто :) – 2014-10-22 10:54:23

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) шаблона Singleton. Вам нужно тщательно подумать, действительно ли это подходит, и если да, то это способ сделать это. Когда я его использую, я обычно помещаю вышеуказанный код в модуль самостоятельно (за исключением того, что если я использую более одного синглтона в приложении, я помещаю их все вместе в один модуль). Вы можете добавить процедуру уничтожения в том же модуле, и вызывать его из Вашего выхода приложения:

Public Sub CloseSingleton() 

    Set objSharedClass = Nothing 

End Sub 

Или вы можете просто позволить ей выйти за рамки, когда приложение закрывается - не так аккуратно, но я никогда видел, что это вызывает проблему (обычно я убираю, хотя ...).

EDIT

Использование (только в случае, если это не очевидно). Либо:

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

Или:

... 
DoSomethingWith GetShared.MethodOrProperty 
... 

Первый предпочтительнее, если вы собираетесь использовать общий класс больше, чем один раз в вызывающей процедуре, но вторая отлично работает для одного вызова.