カスタムクラスのインスタンスであるグローバル変数があります。
オブジェクトが設定されているかどうか、またはオブジェクトを初期化する必要があるかどうかを確認するにはどうすればよいですか?
カスタムクラスのインスタンスであるグローバル変数があります。
オブジェクトが設定されているかどうか、またはオブジェクトを初期化する必要があるかどうかを確認するにはどうすればよいですか?
回答:
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
obj Is Nothing
はチェックと同じではないことに注意してくださいIsNothing(obj)
!これをチェックするための正しい構文をありがとう...ないように注意してくださいなぜIsNothing()
振る舞い異なっ...
Not (obj Is Nothing)
より理解しやすいと思いますNot obj Is Nothing
。私の脳は「Notobj」が何であるかを知りません!
これを行う(安全でない)方法-明示的なオプションを使用しなくても大丈夫なら-は...
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が宣言されていない変数を空のバリアント型として自動インスタンス化するためです。これにより、動作を管理するための補助ブール値が不要になります。
Option Explicit
。それは問題以外には何も得られません。動作を「切り替える」には、条件付きコンパイルを使用します。