シベリア鉄道旅行記 更新中です。

起動済みIEの取得、ID属性のない要素の処理

前回はIEを起動する処理について書きましたが、
今回はまずHTMLのtitle要素からIEのウィンドウを取得する方法です。

'IE探索 titleで検索
Private Function getIEbyTitle(title as String) as Object
 Dim colsh as Object, win as Object
 Set colsh = CreateObject("Shell.Application")
 For Each win In colsh.Windows 'Windowsオブジェクト全体を走査
  If Typename(win.Document) = "HTMLDocument" Then 'HTMLDocument形式であるオブジェクトを対象
   If Instr(win.Document.Title, title) > 0 Then ’タイトルを含むオブジェクトを対象
    Set getIEbyTitle = win
    Exit For
   End If
  End If
 Next
End Function

次はId属性で操作したい要素の取得ができない場合の書き方です。
基本はie.Document.getElementByIdで要素の取得ができますが、
ie.Document以下はDOM APIで操作)
もちろんid属性がなければgetElementByIdでは要素が操作できません。
そこで、ここではname要素で取得する書き方を紹介します。

' Anchorタグをname指定でクリック
Function clickElementByName(ie As InternetExplorer, name As String)
 Dim element as Object, doc as Object
 Set doc = ie.Document
 For Each element In iedoc.getElementsByName("a") '全Anchorタグを走査
  If InStr( element.name, name) > 0 Then
   element.Click
   Call waitIE(ie) 'IE遷移待ち処理を呼ぶ
   Exit For
  End If
 Next
End Function

同様に、hrefで取得も可能です。
(element.nameをelement.hrefに変更、引数としてnameではなくhrefを渡す)
最近の動的に下位の項目が表示されるようなメニューバーのリンクは
href属性でクリックできます。

ちなみに元ネタはこちら。
この本読んで、あとはWebで調べつつ書きました。
Excel VBAでIEを思いのままに操作できるプログラミング術
こちらはこの本に関連するIE操作特集ページ
Excel VBAでIEを思いのままに操作できるプログラミング術 〜窓の杜 特別レッスン〜