以下に示すように、VBA アプリケーションには条件がありIf
ます。
If Not My_Object Is Nothing Then
My_Object.Compute
コードをデバッグ モードで実行すると、 「変数なし」If
の場合でも条件が true を返すことがわかりました。My_Object
誰かがこれを説明してもらえますか? My_Object.Compute
存在するときだけ実行したいMy_Object
。
以下に示すように、VBA アプリケーションには条件がありIf
ます。
If Not My_Object Is Nothing Then
My_Object.Compute
コードをデバッグ モードで実行すると、 「変数なし」If
の場合でも条件が true を返すことがわかりました。My_Object
誰かがこれを説明してもらえますか? My_Object.Compute
存在するときだけ実行したいMy_Object
。
Issun へのコメントに基づいて:
説明してくれてありがとう。私の場合、オブジェクトは If 条件の前に宣言および作成されます。では、 If 条件を使用して < No Variables> をチェックするにはどうすればよいですか? つまり、My_Object に < No Variables> がある場合、My_Object.Compute を実行したくありません。
オブジェクトのプロパティの 1 つを確認する必要があります。オブジェクトが何であるかを教えてくれなければ、私たちはあなたを助けることはできません.
いくつかの一般的なオブジェクトをテストしたところ、Collection
アイテムが追加されていないインスタンス化されたオブジェクト<No Variables>
がウォッチ ウィンドウに表示されることがわかりました。オブジェクトが実際にコレクションである場合は、プロパティ<No Variables>
を使用して状態を確認できます。.Count
Sub TestObj()
Dim Obj As Object
Set Obj = New Collection
If Obj Is Nothing Then
Debug.Print "Object not instantiated"
Else
If Obj.Count = 0 Then
Debug.Print "<No Variables> (ie, no items added to the collection)"
Else
Debug.Print "Object instantiated and at least one item added"
End If
End If
End Sub
As New
オブジェクトを宣言すると、Is Nothing
チェックが役に立たなくなることにも注意してください。その理由は、オブジェクトを宣言すると、最初に呼び出したときにオブジェクトAs New
が存在するかどうかを確認するためであっても、最初に呼び出されたときに自動的に作成されるからです!
Dim MyObject As New Collection
If MyObject Is Nothing Then ' <--- This check always returns False
これは、特定の問題の原因ではないようです。しかし、他の人がこの質問を Google 検索で見つける可能性があるため、これは初心者によくある間違いであるため、含めたいと思いました。
クラスオブジェクトに変数がないからといって、それが何もないというわけではありません。オブジェクトを宣言することとオブジェクトを作成することは、2 つの異なることです。オブジェクトを設定/作成しているかどうかを確認してください。
たとえば、ディクショナリ オブジェクトを取り上げます。変数が含まれていないからといって、作成されていないわけではありません。
Sub test()
Dim dict As Object
Set dict = CreateObject("scripting.dictionary")
If Not dict Is Nothing Then
MsgBox "Dict is something!" '<--- This shows
Else
MsgBox "Dict is nothing!"
End If
End Sub
ただし、オブジェクトを宣言しても作成しない場合は、何もありません。
Sub test()
Dim temp As Object
If Not temp Is Nothing Then
MsgBox "Temp is something!"
Else
MsgBox "Temp is nothing!" '<---- This shows
End If
End Sub