次のように配列の要素を確保しないでUBoundなどを使うと,
「インデックスが有効範囲にありません。」というエラーが出る.
Sub test()
Dim i As Long
Dim a() As Long
For i = 0 To UBound(a) ‘エラー
‘~~~
Next
End Sub
エラーを回避しようと思っても Not a Is Nothing とかは使えない。
次のようにするとエラーを回避できる.
Sub test()
Dim i As Long
Dim a() As Long
If Not Not a Then ‘Notを2つ
For i = 0 To UBound(a)
‘~~~
Next
End If
End Sub
または,
Sub test()
Dim i As Long
Dim a() As Long
If Sgn(a) <> 0 Then ‘Sgn関数を使う(なぜ使えるのかは不明)
For i = 0 To UBound(a)
‘~~~
Next
End If
End Sub
または,
Private Declare Function SafeArrayGetDim Lib “oleaut32” (ByRef psa() As Any) As Long
Sub test()
Dim i As Long
Dim a() As Long
If SafeArrayGetDim(a) <> 0 Then ‘APIを使う
For i = 0 To UBound(a)
‘~~~
Next
End If
End Sub

