« 行と列を入れ替える | トップページ | セル内の改行を削除する »

2010年5月13日 (木)

オブジェクトがNothingか判別する

定義したオブジェクト型の変数に何も代入していない状態では
ウォッチで調べると変数の値はNothingになります。

変数objがNothingかどうかを判別するために
If文を使って条件判断します。

そこで次のコードを実行してみます。

オブジェクトがNothingか判別するコード:

Sub macro20100513a()
'オブジェクトがNothingか判別する
'エラーになるコード
   
    Dim obj As Object
   
    If obj = "Nothing" Then
        MsgBox ("変数objはNothingです。")
    End If

End Sub

実行結果:実行時エラー'438'になります。
Vba20100513a

If文の条件式 obj = "Nothing"は
Object型の変数objと文字列Nothingを比較しようとして
エラーになります。

次のコードはエラーが起こるでしょうか?
実行してみます。

オブジェクトがNothingか判別するコード:

Sub macro20100513b()
'オブジェクトがNothingか判別する
'エラーになるコード
   
    Dim obj As Object
   
    If obj = Nothing Then
        MsgBox ("変数objはNothingです。")
    End If

End Sub

実行結果:エラーになります。
Vba20100513b

Nothingはオブジェクトです。
=演算子ではオブジェクト同士の比較はできません。
2つのオブジェクトの比較は
Is演算子を使用します。

先ほどのコードは次のようにすると
エラーが発生しないで実行できます。

オブジェクトがNothingか判別するコード:

Sub macro20100513c()
'オブジェクトがNothingか判別する
   
    Dim obj As Object
   
    If obj Is Nothing Then
        MsgBox ("変数objはNothingです。")
    End If

End Sub

次のコードは
オブジェクトがNothingではない場合に
If文の中を実行します。

オブジェクトがNothingか判別するコード:

Sub macro20100513d()
'オブジェクトがNothingでないか判別する

    Dim obj As Object
    Set obj = ActiveSheet
   
    If Not (obj Is Nothing) Then
        'ここに変数objがNothingでない場合に
        '実行したいコードを書く
        MsgBox ("変数objはNothingではありません。" & _
        TypeName(obj) & "です。")
    End If

End Sub

上記コードのIf文の条件式
Not (obj Is Nothing)は
変数objがNothingでない場合にTrueになります。



Nothingの判別は
TypeName関数を使用することでも可能です。
TypeName関数は
オブジェクトの情報を文字列で返します。

オブジェクトがNothingか判別するコード:

Sub macro20100513e()
'オブジェクトがNothingか判別する
   
    Dim obj As Object
   
    If TypeName(obj) = "Nothing" Then
        MsgBox ("変数objはNothingです。")
    End If

End Sub

Microsoftサイト参考Web「比較演算子」

|

« 行と列を入れ替える | トップページ | セル内の改行を削除する »

コメント

この記事へのコメントは終了しました。

トラックバック


この記事へのトラックバック一覧です: オブジェクトがNothingか判別する:

« 行と列を入れ替える | トップページ | セル内の改行を削除する »