Home » エクセルマクロ・Excel VBAの使い方 » VBAやVBSのNothingとはどういう状態なのか

動作検証バージョン:64bit Windows 10 Pro + 32bit Excel(バージョン1910 ビルド12130.20390 Microsoft Store)

「VBS nothing どんな状態」
という検索キーワードに気が付きました。

VBScritptで見かける
  If obj Is Nothing Then
といった構文を、正しく理解しようとしている方による検索です。

VBSで確認するよりも、VBAの開発環境であるVBE(Visual Basic Editor)の、ウォッチウィンドウを使って確認するのを、おすすめします。

[スポンサードリンク]

NothingとはObjPtr関数の戻り値が0の状態

まずは結論を。
オブジェクトのメモリアドレスを返す、(隠し関数である)ObjPtr関数の戻り値が「0」の状態が、Nothingです。

Nothingを確認するSubプロシージャ

ご自分の手と目で確認してください。
Excelでなくても、WordでもPowerPointでもいいので、VBEを起動し、標準モジュールに以下のSubプロシージャを作成してください。
Sub sample()
 Dim obj As Object
 Set obj = Application
 Set obj = Nothing
End Sub

オブジェクト変数objを用意して、Applicationプロパティの戻り値を格納して、Nothingにするだけの、このまま実行しても何もおきないSubプロシージャです。

Nothingの確認手順

上記のSubプロシージャを、式の値をウォッチウィンドウで確認しながらステップ実行すると、Nothingがどういう状態かを確認できます。

ウォッチ式の追加

ウォッチウィンドウで確認するウォッチ式を追加します。

上記のSubプロシージャで使っているオブジェクト変数「obj」
オブジェクト変数objのメモリアドレスを確認する「ObjPtr(obj)」
という2つの式を追加してください。

オブジェクト変数objは、コードからドラッグアンドドロップで追加するのが簡単でしょう。

「ObjPtr(obj)」のほうは、[ウォッチ式の追加]ダイアログで下図のように入力してください。

ウォッチ式を確認しながらステップ実行する

拙著『いちばんやさしいExcel VBAの教本』でも多用しているショートカットキー[F8]でステップ実行を開始します。

このときウォッチウィンドウは下図のような状態になります。

オブジェクト変数objの値はNothingで、ObjPtr(obj)の値は「0」です。

これが先ほどお伝えした、Nothingの状態です。

オブジェクト変数に、参照情報が代入されていない初期状態です。

ステップ実行を継続する

ショートカットキー[F8]でステップ実行を継続し、
  Set obj = Application
を実行します。

ウォッチウィンドウは下図のような状態になります。

オブジェクト変数objの値はNothingではなくなり、ObjPtr(obj)の値は0ではなくなりました。

ちなみに値(メモリアドレス)は、実行環境やタイミングによって異なる値になります。

これがNothingではない状態です。

オブジェクト変数に、オブジェクトへの参照情報が代入された状態です。

更にステップ実行を継続する

更にショートカットキー[F8]でステップ実行を継続し、
  Set obj = Nothing
を実行します。

ウォッチウィンドウは下図のような状態になります。

オブジェクト変数objの値は再びNothingになり、ObjPtr(obj)の値も0になりました。

これもNothingの状態です。
オブジェクト変数に、参照情報が代入されていない状態です。

Nothingとは

最後にもう一度。
VBAやVBSのNothingとは、オブジェクト変数に参照情報が代入されていない状態です。

ObjPtr関数の戻り値が「0」のときが、Nothingの状態です。

最終更新日時:2019-12-08 15:20

[スポンサードリンク]

Home » エクセルマクロ・Excel VBAの使い方 » VBAやVBSのNothingとはどういう状態なのか

TrackBack:0

TrackBack URL

Home » エクセルマクロ・Excel VBAの使い方 » VBAやVBSのNothingとはどういう状態なのか

「エクセルマクロ・Excel VBAの使い方」の記事一覧

検索


Copyright © インストラクターのネタ帳 All Rights Reserved.

.