VBAのIsObjectとVBSのIsObject【備忘録】

VBAのソースをVBSに移植していて躓いたことがあったので、備忘録として残しておこうと思います。

VBAではNot elm Is Nothing

IE操作にてあるページでもしあるボタンがあったらクリック、といったスクリプトを書いていました。ボタンがないのにクリックをしてしまうと、オブジェクトがない、とエラーが出てしまいますので、IF文でオブジェクト(DOM要素)があるかチェックして、あったらクリックをします。しかしVBAでIsObjectでチェックすると、要素がないのにも関わらずTrueが返ってしまい、クリックする箇所で当然エラーが出ます。ですので、VBAではIF文をNot elm Is Nothingとしました。これで問題なく動作してました。

VBSではIsObject(elm)

VBSに移植すると、Not elm Is Nothingだと、オブジェクトがない、とエラーが出ます。ですのでIsObjectにしてみると、VBAでは要素がなくてもTrueが返っていたのにVBSではFalseが返り、IsObjectで問題なく動作しました。

原因について

これは、無いはずのDOM要素がSet elm = Nothingとして扱われているのかどうかで変わっているのかな、と思いました。VBAでは、DOM要素そのものがなくてもNothingで初期化された状態なので、IsObjectでTrueが返る。でもDOM要素そのものはないのでクリックするとエラーが出る。そしてNothingなので、Not elm Is NothingだとIF文には入らない。

VBSではNothingで初期化されていないので、Not elm Is Nothingでエラーが出る。同じくNothingで初期化されていないので、IsObjectでFalseが返る、といった感じなのかな。

VBSでは変数のデータ型を省いたり、そういった仕様の違いがあるのは知ってましたが、上記のような違いがあるのは初めて知りました。


Excel VBAでIEを思いのままに操作できるプログラミング術 Excel 2013/2010/2007/2003対応

Excel VBAでIEを思いのままに操作できるプログラミング術 Excel 2013/2010/2007/2003対応