0

カスタム オブジェクトについて、2 つの条件をテストしたいと考えています。1 つ目は、オブジェクトが何もないかどうかです。その場合は、ブロックに入ります。オブジェクトが何もない場合は、オブジェクトのプロパティの 1 つでテストを行い、このテストに合格した場合にのみブロックに入ります。

したがって、ステートメントは次のようになります。

If myObject Is Nothing Or myObject.myInt > x Then
    'Perform my task
End If

myObject が実際に何もない場合、これはエラーをスローします。これは、2 番目の条件をテストするときに、存在しないオブジェクトのプロパティにアクセスしようとするためです。

私がこれまで扱ってきたほとんどの言語は、最初の条件が true であることがわかった場合、Or ステートメントの 2 番目の条件をわざわざテストしないため、上記の行を記述して問題を解決できます。VBAはこれを許可していないようです。に頼らずに、このステートメントを書くことができる同等の方法はありますか?

If myObject Is Nothing Then
    'Perform my task
ElseIf myObject.myInt > x Then
    'Perform my task
End If

?

明確にするために編集

4

3 に答える 3

4

フラグを作成できます。

PerformTheTask = False

If myObject Is Nothing Then
    PerformTheTask = True
ElseIf myObject.myInt > x Then
    PerformTheTask = True
End If

If PerformTheTask Then
    'Perform my task
End If
于 2012-07-05T04:09:33.700 に答える
1

コードの問題を解決するのに役立ちませんが、短絡演算子の評価に関するWikipediaページへのポインターを含めると思いました。

http://en.wikipedia.org/wiki/Short-circuit_evaluation

これには、一般的な言語での一般的な演算子の便利な表が含まれており、それらが短絡セマンティクスに従うか、常に熱心に評価するかを分類します。AndVBAの特定のベースでは、オペランドOrが実際に熱心に評価されていることを確認します。

于 2012-07-05T04:13:12.273 に答える
1

少し珍しいことですが、次のこともできます。

Select Case True
    Case myObject Is Nothing, myObject.myInt > x
        'Perform task
End Select

暗黙の比較を選択すると、短絡評価が使用されます。「または」はしません。

于 2012-07-05T05:34:19.923 に答える