2012-05-30 43 views
2

在VBA中,我知道如果您只想在當前項目中訪問子/函數,則可以將這些方法放入標記爲Option Private Module的模塊中。VBA選件專用模塊等效,但僅用於類模塊中的單個功能?

但是如果我想在類模塊中使用某種方法來做到這一點呢?我可以從一個類中分離出單個方法嗎?

具體來說,我在我的一個類中有一個屬性,我希望它是隻讀的,除非它正在當前項目中使用。該類中還有其他屬性/子類/函數,我想要真正公開。

我認爲Friend Property Let...可能是這樣做的正確方法,但是當我嘗試它時,它不會阻止同一個打開的Excel會話中的另一個項目分配給該屬性。 所以我正在尋找Option Private Module等價於一個類中的函數的子集。

這可能嗎?


解決此問題的另一種方法是:您可以在多個子模塊上傳播一個Class Module嗎?

回答

3

由於在這個問題上沒有太多的眼球,我可能甚至沒有措辭好,我只是想我會發布我如何決定解決這個問題,同時,爲了子孫後代。

VBA中的類只能是PrivatePublicNotCreateable,所以我已經在使用工廠方法來創建對象。
我只是在工廠方法中添加了一些代碼,爲每個對象分配一個唯一的標識符,並在我自己單獨的數據結構中跟蹤項目範圍的僞屬性。 該類有屬性的「獲取」,但要分配給它,需要調用Option Private Module模塊中的特殊項目範圍功能。
不是一個完美的解決方案,但至少它做我想要的。