web-dev-qa-db-ja.com

オブジェクトが設定されているかどうかのVBAチェック

カスタムクラスのインスタンスであるグローバル変数があります。

オブジェクトが設定されているかどうか、または初期化する必要があるかどうかを確認するにはどうすればよいですか?

69
Icode4food
If obj Is Nothing Then
    ' need to initialize obj: '
    Set obj = ...
Else
    ' obj already set / initialized. '
End If

または、他の方法でそれを好む場合:

If Not obj Is Nothing Then
    ' obj already set / initialized. '
Else
    ' need to initialize obj: '
    Set obj = ...
End If
117
stakx

これを行うための(安全でない)方法-オプション明示を使用しないで大丈夫なら-は...

Not TypeName(myObj) = "Empty"

これは、オブジェクトが宣言されていない場合も処理します。これは、宣言をコメントアウトして動作をオフにする場合に便利です...

Dim myObj as Object
Not TypeName(myObj) = "Empty"  '/ true, the object exists - TypeName is Object

'Dim myObj as Object
Not TypeName(myObj) = "Empty"  '/ false, the object has not been declared

これは、VBAが宣言されていない変数を空のバリアント型として自動的にインスタンス化するために機能します。これにより、動作を管理するための補助的なブール値が不要になります。

1
Cool Blue