Excel (VBA)

Excel VBAに関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(Windows 8.1 Pro : Excel 2013)
IE制御、iframeの中身取得
投稿日時: 16/06/14 21:40:36
投稿者: 迷黒羊

検索と試行錯誤を繰り返しましたが、壁に突き当たりました。
どうか方向性だけでもご教示いただければ幸いです。
 
やりたいこと:
下記HP(www以前は省略してます。)から、特定サービスを選択し、検索結果を得たい。
.kaigokensaku.jp/01/index.php?action_kouhyou_pref_search_keyword_search=true
 
現況:
特定サービスの選択と検索結果の表示までの操作はできたが、検索結果がiframeの中に表示されているようで、iframeを捕まえられず、思うような検索結果を取得できない。下記コードではiframeを捕まえたと思っても、親HTMLの中身?のようなものが入っている。
 
知りたいこと:
検索結果中にあるボタンを押してさらに詳細を調べる場合もあるため、
iframeの中身をオブジェクトとして取得し、検索結果を取得したい。
 
作成したコード:
Sub t()
 
Dim objShell As Object
Dim objWindow As Object
Dim objIE As Object
Dim objIN As Object
 
  Set objShell = CreateObject("Shell.Application")
 
   For Each objWindow In objShell.Windows
       If TypeName(objWindow.document) = "HTMLDocument" Then
           Set objIE = objWindow
           If Left(objIE.document.URL, 26) = "http://www.kaigokensaku.jp" Then
               Debug.Print objIE.document.frames.Length
               Set objIN = objIE.document.getElementsByTagName("iframe")
               'ここでobjINの中身を見ても、目的の検索結果が入っていない。(親の中身を取得?)
               Exit For
           End If
       End If
   Next
 
   Set objShell = Nothing
   Set objIE = Nothing
 
End Sub
 
ソース(一部):
<iframe src="" id="resultListFrame" name="resultListFrame" width="100%" height="750px" frameborder="0"></iframe>
 
参考にしたHPなど:
http://www.excel.studio-kazu.jp/kw/20150419215231.html
なお、この質問の回答者はMOUGで解決したとコメントされていますが、半年経過しておりますので、どのように解決したのか判明しません。objINの中身が親HTMLの中身?を捕まえてしまっているからなのか、目的のの情報が出てきませんし、iframeと思しきソースを見てもうまくiframeを捕まえられていないように思われます。
frame数は1のようです。ソース上、src=""になっているので、srcではうまく捕まらないようですし、navigateで当該フレームへの移動もうまく行きません。
 
よろしくお願いします。

回答
投稿日時: 16/06/15 01:37:44
投稿者: Abyss2

下記ソースを試してみてください。
 

 Public Sub DOMCheckTest()
 
    Const CLSID_ShellWindows = "{9BA05972-F6A8-11CF-A442-00A0C90A8F39}"
    
    Dim e As Object         'IDispatch
    Dim oDoc As Object      'DispHTMLDocument
    Dim flg As Boolean
    
    For Each e In GetObject("new:" & CLSID_ShellWindows)
        If TypeName(e) <> "IWebBrowser2" Then GoTo NEXT_LOOP
        
        Set oDoc = e.Document
        If TypeName(oDoc) <> "HTMLDocument" Then GoTo NEXT_LOOP

        flg = e.LocationURL Like "http://www.kaigokensaku.jp*list_list*"
        If flg Then Exit For

NEXT_LOOP:
    Next
    
    If Not flg Then Exit Sub
    
    '''''''''''''''''''''''''''''''''''''''''''''
    ' iframeのDispHTMLDocumentオブジェクトを確保
    '
    '''''''''''''''''''''''''''''''''''''''''''''
    Set oDoc = oDoc.getElementById("resultListFrame").contentWindow.Document
    
    
    '一例...
    For Each e In oDoc.getElementsByClassName("listJigyosyoName")
        Debug.Print "事業所名 : "; e.innerText
    Next
 
 End Sub

投稿日時: 16/06/15 20:45:29
投稿者: 迷黒羊

Abyss2様、速攻での対応ありがとうございました!
ご提示いただいたコードで、無事iFrameの中身を捕まえることができました。
まだ全部は理解しておりませんが、無事動いております。
本当に助かりました。お礼申し上げます。