XXXXXさんより、下記の質問が来ました。
> 【VBA IE操作】テーブル単体を取り出す にて勉強中の老人です。
> 上記サンプルはURLを記述して表示して
>WEBページにテーブルの内容を取得しておりますが、
>当方も目的はページを次から次に切り替えて
>その都度にテーブルの内容をEXCLEに蓄積したいと思っ
> てます。(手動で開いたページのテーブル等)
と、
既存IEを手動で操作して、データを抜く、
そんな質問が来たので、
初めの一歩として、
今回は、テストで起動済みのIEを探し、
グローバル変数に入れておき、
コンボボックスで選択
Bodyタグの テキストとHTMLをテストで表示してみます。
いつもの 酔っ払い フラフラ解説動画・・・
起動済みのIEを選択 Bodyの値を取得するテスト #デバッグ Excel VBA UserForm - YouTube
www.youtube.com
過去に作成した
ken3memo.hatenablog.com
Sub aaa() 'オブジェクトを格納する変数 Dim objShell As Object, objWindow As Object 'シェルのオブジェクトを作成する Set objShell = CreateObject("Shell.Application") 'ウインドウの数だけまわすぞ For Each objWindow In objShell.Windows 'TypeNameでオブジェクト変数のタイプを表示する MsgBox "タイプは:" & TypeName(objWindow.document) Debug.Print "タイプは:" & TypeName(objWindow.document) 'HTMLDocumentだったら If TypeName(objWindow.document) = "HTMLDocument" Then 'URLとタイトルを表示する MsgBox "IEみつけたよ" & objWindow.document.Title Debug.Print "タイトル:" & objWindow.document.Title Debug.Print "URL:" & objWindow.document.URL End If Next Set objShell = Nothing End Sub
↑を参考に
コンボボックスにIEタイトルとURLをセット、
ついでに
グローバル変数に見つけたIEオブジェクトをセットする
Dim IE As InternetExplorer
Dim IE_BOX(10) As Object ←ここにセット、保管してみる
Private Sub btnIE探す_Click() 'オブジェクトを格納する変数 Dim objShell As Object, objWindow As Object Dim n As Integer Me.cbIELIST.Clear '選択用のコンボボックスをクリア、初期化 'シェルのオブジェクトを作成する Set objShell = CreateObject("Shell.Application") 'ウインドウの数だけまわすぞ n = 0 For Each objWindow In objShell.Windows 'TypeNameでオブジェクト変数のタイプを表示する Debug.Print "タイプは:" & TypeName(objWindow.document) 'HTMLDocumentだったら If TypeName(objWindow.document) = "HTMLDocument" Then 'URLとタイトルをコンボボックスへ追加 Me.cbIELIST.AddItem "IE(" & n & "):Title=" & objWindow.document.Title & "):URL=" & objWindow.document.Url Debug.Print "タイトル:" & objWindow.document.Title Debug.Print "URL:" & objWindow.document.Url 'IEを保存 代入する Set IE_BOX(n) = objWindow '配列に保存しておく 'nカウンタを増やす n = n + 1 If n = 9 Then Exit For 'MAX9個までとする End If Next Set objShell = Nothing End Sub
↑で、
IE_BOX(10) に オブジェクト
と
コンボボックス cbIELIST に タイトルとURL
を保存して、
コンボボックスが変わったイベントで、
'コンボボックスでIEが選択されたら Private Sub cbIELIST_Change() Debug.Print Me.cbIELIST.ListIndex & "番目を選択" '未選択のチェック If Me.cbIELIST.ListIndex = -1 Then Me.Caption = "未選択 IEを選択してください" 'Formタイトルバーに未選択を表示 Exit Sub '関数を途中で抜ける End If '選択されたら、 Set IE = IE_BOX(Me.cbIELIST.ListIndex) '選択されたn番目のIEを代入する Me.Caption = Me.cbIELIST.Text '選択されたコンボボックス値をFormタイトルへ Me.txtINFO.Text = Me.cbIELIST.Text & " を 選択しました" End Sub
'選択されたら、
Set IE = IE_BOX(Me.cbIELIST.ListIndex) '選択されたn番目のIEを代入する
で、指定してもらい、
テストのボタン
で
Private Sub btnBODY_InnerTEXT_Click() Dim objBODY As HTMLBody If IE Is Nothing Then Exit Sub 'IEの中身が無ければ関数を抜ける Set objBODY = IE.document.body 'Document.Bodyを変数に代入 Me.txtINFO.Text = objBODY.innerText '.Innertxtの値をテキストボックスへ End Sub Private Sub btnBODY_OuterHTML_Click() Dim objBODY As HTMLBody If IE Is Nothing Then Exit Sub 'IEの中身が無ければ関数を抜ける Set objBODY = IE.document.body 'Document.Bodyを変数に代入 Me.txtINFO = objBODY.outerHTML '.outerHTMLの値をテキストボックスへ End Sub
↑BODYのInnerTEXT と OuterHTMLをセットしてみました。
完成したソース・・・
Dim IE As InternetExplorer Dim IE_BOX(10) As Object Private Sub btnBODY_InnerTEXT_Click() Dim objBODY As HTMLBody If IE Is Nothing Then Exit Sub 'IEの中身が無ければ関数を抜ける Set objBODY = IE.document.body 'Document.Bodyを変数に代入 Me.txtINFO.Text = objBODY.innerText '.Innertxtの値をテキストボックスへ End Sub Private Sub btnBODY_OuterHTML_Click() Dim objBODY As HTMLBody If IE Is Nothing Then Exit Sub 'IEの中身が無ければ関数を抜ける Set objBODY = IE.document.body 'Document.Bodyを変数に代入 Me.txtINFO = objBODY.outerHTML '.outerHTMLの値をテキストボックスへ End Sub 'コンボボックスでIEが選択されたら Private Sub cbIELIST_Change() Debug.Print Me.cbIELIST.ListIndex & "番目を選択" '未選択のチェック If Me.cbIELIST.ListIndex = -1 Then Me.Caption = "未選択 IEを選択してください" 'Formタイトルバーに未選択を表示 Exit Sub '関数を途中で抜ける End If '選択されたら、 Set IE = IE_BOX(Me.cbIELIST.ListIndex) '選択されたn番目のIEを代入する Me.Caption = Me.cbIELIST.Text '選択されたコンボボックス値をFormタイトルへ Me.txtINFO.Text = Me.cbIELIST.Text & " を 選択しました" End Sub Private Sub btnIE探す_Click() 'オブジェクトを格納する変数 Dim objShell As Object, objWindow As Object Dim n As Integer Me.cbIELIST.Clear '選択用のコンボボックスをクリア、初期化 'シェルのオブジェクトを作成する Set objShell = CreateObject("Shell.Application") 'ウインドウの数だけまわすぞ n = 0 For Each objWindow In objShell.Windows 'TypeNameでオブジェクト変数のタイプを表示する Debug.Print "タイプは:" & TypeName(objWindow.document) 'HTMLDocumentだったら If TypeName(objWindow.document) = "HTMLDocument" Then 'URLとタイトルをコンボボックスへ追加 Me.cbIELIST.AddItem "IE(" & n & "):Title=" & objWindow.document.Title & "):URL=" & objWindow.document.Url Debug.Print "タイトル:" & objWindow.document.Title Debug.Print "URL:" & objWindow.document.Url 'IEを保存 代入する Set IE_BOX(n) = objWindow '配列に保存しておく 'nカウンタを増やす n = n + 1 If n = 9 Then Exit For 'MAX9個までとする End If Next Set objShell = Nothing End Sub Private Sub btn閉じる_Click() Unload Me '自分自身を閉じる End Sub
↑こんな感じで、小細工ですが、既存のIEからデータを抜けそうです。
次回は、テーブルを指定して、
さらに絞り込みたいと思っていますが・・・
先は長いかなぁ・・・
サンプルファイルは
test/Book20170807.zip
に保存しておきました。アレンジして使ってみてください。
何かの参考となれば、幸いです。 三流プログラマー Ken3