2012-06-28 22 views
12

同じカスタムオブジェクト型の2つの変数が同じオブジェクトを参照しているかどうかをテストする演算子または関数は何ですか?私は試しましたVBA:オブジェクトの等価性のテスト方法(2つの変数が同じオブジェクトを参照するかどうか)

If myObject = yourObject Then 

しかし、実行時エラー438オブジェクトがこのプロパティまたはメソッドをサポートしていない取得します。私は2つのオブジェクトのすべてのフィールドが同じ値を持っているかどうかをテストするために '='演算子をオーバーライドするように指示していると思います。しかし、私が望むのは、それらが同じオブジェクトであるかどうかをテストすることです。

答えて

26

私は、 '='演算子をオーバーライドして、2つのオブジェクトのすべてのフィールドが同じ値を持つかどうかをテストすると言っています。

いいえ、それはオブジェクトには別の方法で呼び出されたデフォルトプロパティがないことがわかり、返された結果が比較されます。

あなたはIs

If myObject Is yourObject Then 
+0

おかげGSerg、私がまさに必要 – Swiftslide

+0

@GSergと参照の等価テスト:2つの範囲オブジェクトで動作するようには思えません。たとえば、Set r1 = Range( "A1")、Set r2 = Range( "A1")の場合、Debug.Print r1 Is r2はFalseを返します。 –

+7

@ExcelDevelopers 'Is'は、参照レベルの等価性をテストしますが、上位レベルのロジックに応じて等価ではありません。 2つの 'Range'オブジェクトは異なるインスタンスであるため、' Is'は正しくfalseを返します。彼らが同じ範囲を参照しているという事実は関連していません - 'Is'はこの追加論理接続について知ることができず、' Range'sにのみ関連しています。 2つの 'Range'が同じシート範囲を参照しているかどうかを確認するには、' Address'を比較するか、 'Application.Intersect(r1、r2)'が両方と同じサイズの範囲を与えるかどうかを調べる必要があります'r1'と' r2'です。 – GSerg

関連する問題