2015-08-26 20 views
1

我最近開始使用Excel VBA編程。 來自Java環境,我試圖將OOP原則應用於VBA,但我很難做到這一點。Excel VBA - 用戶定義類實例的公共範圍

我創建了一個配置類模塊來封裝所有的初始配置,並提供對它的簡單和受控訪問。

從Workbook_Open()函數初始化Config對象。

我想要做的是將該實例保留在公共範圍內以允許從完整程序訪問同一實例。 (java中的靜態變量或單例)

Option Explicit 

Dim conf As Config 

Private Sub Workbook_Open() 
    Set conf = New Config 

End Sub 

這樣做有效,但範圍不公開。

當我把公共關鍵字,而不是朦朧中,我得到以下錯誤:

Compile error:

Private object modules cannot be used in public object modules as parameters or return types for public procedures, as public data members, or as fields of public user defined types

所以我的問題是,是不是有什麼辦法可以保持一個對象實例公開?

如果不是,那麼以面向對象的方式組織項目而不將所有內容都放在工作簿模塊中的最好方法是什麼?

謝謝你的時間。

+0

您可能也對此感興趣http://stackoverflow.com/questions/28817295/what-are-the-potential-consequences-of-setting-a-class-to-publicnotcreatable –

+0

@DickKusleika這清除了很多的東西,另一種解決方案看起來像一個黑客。非常感謝! –

+0

很高興提供幫助。如果你想更接近單身人士,可以使用google VB_PredeclaredID。這是一個你可以設置的屬性,但是VBA中的屬性本身就是一種破解。 –

回答

1

只需將配置類的實例更改爲public?點擊配置類,並通過屬性窗口設置實例。