Excel VBA 動的配列が空かどうかの確認方法

次のように配列の要素を確保しないで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

Visual Studio でエディットコンティニューが使えない場合(64bit)

Visual Studio 2005以降には,
プログラムを実行中にブレークポイントなどで実行を中断して
その場でコードを変更できるエディットコンティニューがあるが,
この機能は64bitアプリでは使えない.

ターゲットCPUがAny CPUの場合,
開発マシンのOSを64bitに替えると
64bitアプリとして走るからこれを知らないと
急にエディットコンティニューが使えなくなって困る.

この場合,エディットコンティニューを使えるようにするには,
ターゲットCPUをx86にすればよい.

[プロジェクトのプロパティ] – [コンパイル] – [詳細コンパイル オプション] – [ビルドの詳細設定] – [ターゲット CPU] を x86 に変更.

エディット コンティニュ (Visual Basic) (MSDN)