If...Then...Else
ステートメントに複数の条件をつなげるとエラーになるケースを考慮する必要がある。他の言語ならば AND 演算子の条件は False と判定された時点でその後の条件式を処理しないが、VBA の場合は全ての条件式を処理してしまうので、条件式の前のチェックを続けて確認するとエラーとなってしまう。
(例) If 式1 And 式2 And 式3 Then の場合は
- 他言語: 式1が False ならば、式2以降は判定しない。
- VBA: 式1の結果に関わらず、式2以降も全て判定する。
1.Null チェックと合わせて条件式をつなげる
Collection が Null の場合は、条件式1 (Not IsNull) 結果が False であるにも関わらず、後続の条件式も判定してしまう。If Not IsNull(Collection) And Collection.Count > 0 Then Debug.Print "Count > 0" End Ifエラーメッセージ: 424 オブジェクトが必要です。
2.数値チェックと合わせて条件式をつなげる
Value が Null や Nothing の場合は、IsNumeric 関数が False であるにも関わらず、後続の CInt 関数でエラーとなってしまう。If IsNumeric(Value) And CInt(Value) > 0 Then Debug.Print "Value > 0" End Ifエラーメッセージ: 91 オブジェクト変数または With ブロック変数が設定されていません。