如何在vba中创建公共/共享实例

Gad*_*lin 7 vba

我想创建一个类的实例,所有其他人可以使用到目前为止我在每个类中创建每个实例的方法.

有没有办法可以只创建一个其他类可以看到的实例.

Normaly我可以创建一些其他人可以看到的静态变量.但在VBA中似乎不可能:/

Rol*_*ble 14

在一个模块中:

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
Run Code Online (Sandbox Code Playgroud)

这是Singleton模式的VB(A)实现.您需要仔细考虑它是否真的合适,如果是,那就是这样做的方法.当我使用它时,我通常将上面的代码单独放在一个模块中(除非我在应用程序中使用多个Singleton,我将它们放在一个模块中).您可以将破坏例程添加到同一模块,并从应用程序出口调用它:

Public Sub CloseSingleton()

    Set objSharedClass = Nothing

End Sub
Run Code Online (Sandbox Code Playgroud)

或者,当应用程序关闭时,你可以让它超出范围 - 不是很整洁,但我从来没有看到它导致问题(我通常会清理,但是......).

编辑

用法(以防万一不明显).或者:

...
Set objLocalCopy = GetShared
DoSomethingWith objLocalCopy.MethodOrProperty
...
Run Code Online (Sandbox Code Playgroud)

要么:

...
DoSomethingWith GetShared.MethodOrProperty
...
Run Code Online (Sandbox Code Playgroud)

如果您要在调用例程中多次使用共享类,则第一个是首选,但第二个适用于单个调用.


N0A*_*ias 4

在模块中创建子函数或函数,您就可以从其他类访问它。

ModuleName.MethodName
Run Code Online (Sandbox Code Playgroud)