2011-07-14 34 views
3

我在程序的特定子內創建了「Dog」類的實例「Lassie」。我也給了它一些有用的屬性,例如Lassie.Age = 7和Lassie.HeelCapability = False。VBA [classes] - 如何訪問另一個子類中以前實例化的類

現在我想訪問另一個 sub並將Lassie.HeelCapability更改爲True。 我該如何去定義這個新子中的實例「Lassie」,以便它可以使用?

所有我來翻過的代碼是這樣的:

Dim Lassie As classDog 

Set Lassie = New classDog 

基本上我所尋找的是導入現有實例「靈犬萊西」到另一個子的方式,不使用關鍵字「新」從而創建一個新的「Lassie」(沒有以前給出的所有屬性)。

我收到的錯誤消息告訴我「需要對象」或「對象變量或塊變量未設置」。

當然有一種方法可以做到這一點。

在此先感謝。

回答

2

您需要將'Lassie'作爲參數傳遞給您的其他子。

public sub DeclareSub() 
    Dim Lassie as classDog 
    Lassie = new classDog 

    OtherSub Lassie 
end sub 

public sub OtherSub(ByRef dog as classDog) 

end sub 

在子程序「OtherSub」變量「狗」是指相同的對象實例作爲從「DeclareSub」變量「萊茜」。

+3

對於新的VBA程序員問題的大部分正確答案+1。不過,我編輯了你的答案。對於對象引用,當涉及到對基礎對象所做的更改時,是否傳遞它們「ByVal」或「ByRef」並不重要。 'OtherSub'可以改變它傳遞的'classDog'的實例,即使它傳遞了'ByVal'。在這種情況下,'ByVal'會做的是防止'OtherSub'將'參數'設置爲'classDog'的另一個實例。 – jtolle

+0

@jtolle感謝您的澄清。你每天學習新的東西 :) –

0

ByRef中的對象傳遞給您的新子例程。

Sub ChangeHeel(ByRef olassie As classDog) 
    'change the object here, and it will be changed in the calling sub 
    olassie.HeelCapability = True 
End Sub 
+1

查看我對keytarhero答案的評論,但ByRef在這裏並不重要... – jtolle

相關問題