「vba nothing 比較」
「マクロ if nothing の場合」
「excel vba nothing 条件式」
「excel vba nothing if文」
といった検索で、このサイト『インストラクターのネタ帳』へのアクセスがあります。
VBAの、オブジェクト変数・オブジェクト式に慣れていない方からいただく、定番の質問・疑問の一つです。
If オブジェクト変数・オブジェクト式 = Nothing Thenではダメ
「vba nothing 比較」
「マクロ if nothing の場合」
「excel vba nothing 条件式」
「excel vba nothing if文」
という検索をなさった方は、おそらく、
Dim obj As Object
If obj = Nothing Then
何らかの処理
End If
のようなIf文で、Nothingかどうかの判定を行おうとしたのではないかと想像しています。
このような条件分岐文を書いて、メニュー[デバッグ]-[VBAプロジェクトのコンパイル]を実行すると、「コンパイルエラー:オブジェクトの使い方が不正です。」というエラーが発生してしまいます。
Nothing判定を行うサンプルマクロ
Nothingの判定を行うには、比較演算子の「=」ではなく「Is」を使ってください。
具体的には以下のような使い方をします。
Dim obj As Object
Set obj = ThisWorkbook If obj Is Nothing Then
MsgBox "Nothingです。"
Else
MsgBox "Nothingではありません。"
End If
End Sub
上記のマクロを実行すると、オブジェクト変数・objにはこのSubプロシージャが書かれているWorkbookオブジェクトがセットされているので、「Nothingではありません。」というメッセージが表示されます。
次に、
Set obj = ThisWorkbook
をコメントアウトしてから実行してください。
この場合はオブジェクト変数objには何もセットされない状態で
If obj Is Nothing Then
の判定が行われるので「Nothingです。」というメッセージが表示されます。
オブジェクト変数・オブジェクト式のNothing判定には、Is演算子を使ってください。
Is演算子を使ったIf文がピンと来ない場合
また、上記のNothing判定を行っている
If obj Is Nothing Then
の部分が、どうもピンと来ないという方も時折いらっしゃいます。
その場合は、
If obj Is Nothing Then
を、
If (obj Is Nothing) = True Then
と書き直して考えてみてください。
最終更新日時:2019-01-17 14:24
Home » エクセルマクロ・Excel VBAの使い方 » 条件分岐 » If文でNothingの判定を行うには-Is演算子