2011-07-14 18 views
3

私のプログラムの特定のサブの中でクラス "Dog"のインスタンス "Lassie"を作成しました。私はLassie.Age = 7やLassie.HeelCapability = Falseのような有用なプロパティも与えました。VBA [クラス] - 別のサブのクラスのインスタンス化されたインスタンスにアクセスする方法

subにアクセスして、Lassie.HeelCapabilityをTrueに変更したいとします。 この新しいサブの中でインスタンス "Lassie"を定義するにはどうすれば作業できますか?

私はaccrossはこのようになってきたすべてのコード:

基本的に
Dim Lassie As classDog 

Set Lassie = New classDog 

私が探しています何がキーワードを使用せずに、別のサブに既存のインスタンス「名犬ラッシー」をインポートする方法です「新」以前に与えられたすべての特性を持たずに新しい "ラッシー"を作成する。

私が受け取っているエラーメッセージは、「オブジェクトが必要です」または「オブジェクト変数かブロック変数が設定されていません」と伝えています。

確かにこれを行う方法があります。

ありがとうございます。

答えて

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

+1新しいVBAプログラマーの質問へのほとんど正解です。私はあなたの答えを編集しました。オブジェクト参照では、基本オブジェクトに加えられた変更について、ByValまたはByRefを渡すかどうかは関係ありません。 'OtherSub'は、' ByVal'が渡されても渡される 'classDog'のインスタンスを変更することができます。この場合、 'ByVal'は' OtherSub'がパラメータ 'dog'を' classDog'の別のインスタンスに 'Set'するのを防ぎます。 – 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