VB InternetExplorer.getElementById 「オブジェクトが必要です」エラー対策
VBの InternetExplorer.getElementById は該当する要素がない場合に「オブジェクトが必要です」が発生する。これの扱いに困ったが、次の要領で対処できた。
Dim elm As IHTMLElement
Set elm = ie.document.getElementById("someID")
そこで、次のようなコードにしてみる。
Dim elm As Variant
Set elm = ie.document.getElementById("someID")
こんどは「型が一致しません」エラーが発生する。
これはSetではNullをObjectとして扱おうとするため発生する。
それでは、これではどうだろう。
Dim elm As Variant
elm = ie.document.getElementById("someID")
if IsNull(elm) Then Exit Sub
Dim divs as IHTMLElementCollection
Set divs = elm .getElementsByTagName("div")
Nullのときの処理はうまくいくが、今度はelmがObjectとして設定されていないため、後続のコードで「オブジェクトが必要です」エラーが発生する。
そこで次のように変更し、エラー発生時に処理を継続してみた。
On Error Resume Next
Set elm = ie.document.getElementById("someID")
If IsNull(elm) Then Exit Sub
Set divs = someID.getElementsByTagName("div")
elm = ie.document.getElementById("someID")
If elm Is Nothing Then Exit Sub
On Error Resume Nextとした結果 elm がEmpty値になるため、elmをObjectで宣言している。
次の式でも判別できる。
If IsEmpty(elm) Then Exit Sub
If IsNullOrEmpty(elm) Then Exit Sub
なお、
On Error Resume Next
でエラーを無視するようにしたので、前後の処理の関係ではこのあとで再度On Errorを設定しなおす必要があるでしょう。