以下に示すように、VBAアプリケーションにはIf
条件があります。
If Not My_Object Is Nothing Then
My_Object.Compute
コードをデバッグモードで実行すると、My_Object
に "変数がありません"であっても、If
条件がtrueを返すことがわかりました。
誰か説明していただけますか? My_Object.Compute
が存在する場合にのみMy_Object
を実行したい。
Issunへのコメントに基づいて:
説明ありがとう。私の場合、オブジェクトはIf条件の前に宣言および作成されます。したがって、If条件を使用して<変数なし>を確認するにはどうすればよいですか?つまり、My_Objectに<変数がありません>の場合、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
サンプルコードでは、my object
何にも、そして私はオブジェクトで動作するifステートメントの「not」部分を取得できませんでした。私は試した if My_Object is not nothing
およびif not My_Object is nothing
。それは私が理解できない構文のことかもしれませんが、混乱する時間がないので、私はこのような少しの回避策を行いました:
if My_Object is Nothing Then
'do nothing
Else
'Do something
End if