読者です 読者をやめる 読者になる 読者になる

世界の切りとり方

冷たい荒野を飼う

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

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

VBA IE自動化

前回は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を思いのままに操作できるプログラミング術 〜窓の杜 特別レッスン〜