Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


5426 / 13646 ツリー ←次へ | 前へ→

【50795】起動済みのIEのソースの取得について みつを 07/8/16(木) 11:29 質問[未読]
【50797】Re:起動済みのIEのソースの取得について かみちゃん 07/8/16(木) 12:29 発言[未読]
【50808】Re:起動済みのIEのソースの取得について みつを 07/8/16(木) 18:40 お礼[未読]
【50812】Re:起動済みのIEのソースの取得について ichinose 07/8/16(木) 23:31 発言[未読]
【50823】Re:起動済みのIEのソースの取得について みつを 07/8/17(金) 10:04 お礼[未読]
【50867】Re:起動済みのIEのソースの取得について みつを 07/8/20(月) 21:58 お礼[未読]

【50795】起動済みのIEのソースの取得について
質問  みつを  - 07/8/16(木) 11:29 -

引用なし
パスワード
   はじめまして
ExcelのVBAで下記内容のマクロを作成していましたが
壁にぶち当たってしまったので質問させてください。

動きとしては、あるWebページに移動して検索を行う動作をしたい。
その前段階として、そのページには必ず手順を踏んで遷移しないと
該当のWebページには進めないページになっている。

ソースとしては

Private Sub コマンド1_Click()

  
  Set IE = CreateObject("InternetExplorer.application")
  IE.Visible = True
  
  IE.Navigate2 "xxxx://www.vbalab.net/"
  IE.Navigate2 "xxxx://www.vbalab.net/vbaqa/c-board.cgi?id=excel"
  
  Do While IE.Busy = True
    DoEvents
  Loop
  Do While IE.Document.ReadyState <> "complete"
    DoEvents
  Loop
  
  IE.Document.Links(0).Click
  IE.Quit
  
  Set IE = Nothing
  
  Dim win As Object
  Set win = CreateObject("Shell.Application")

  For Each w In win.Windows
    Debug.Print TypeName(w), w.LocationURL
    If Right$(w.LocationURL, 5) = "excel" Then
    End If
  Next

End Sub

です。
URLは変更しています。

IE.Navigate2で二回目に開いたページの"IE.Document.Links(0).Click"
を行うと新規でIEが起動するようになっています。
その新規で開いたIEを何とかVBA上で操作が行えるようにしたいのですが
どうやって、innerHTMLを取得していいのかわからず壁にぶち当たっています。
  For Each w In win.Windows
    Debug.Print TypeName(w), w.LocationURL
    If Right$(w.LocationURL, 5) = "excel" Then
    End If
で該当のページがあることは見つけることはできていると思っているのですが

  Dim ws
  Set ws = CreateObject("WScript.Shell")
  ws.AppActivate ("タイトル")

を追加して、さらにアクティブ化できることも実験はしたんですが
肝心のVBA上の操作できないところで悩んでいます。

わかりにくい質問で申し訳ございませんが、ご指導のほどよろしくお願いします。

【50797】Re:起動済みのIEのソースの取得について
発言  かみちゃん E-MAIL  - 07/8/16(木) 12:29 -

引用なし
パスワード
   こんにちは。かみちゃん です。

>動きとしては、あるWebページに移動して検索を行う動作をしたい。
>その前段階として、そのページには必ず手順を踏んで遷移しないと
>該当のWebページには進めないページになっている。

私も先日から同様のことに悩んでいますが、とりあえず、以下のURLは参考
になりますでしょうか?
http://www.ken3.org/vba/backno/vba156.html
(先頭4文字は、全角になっていますので、半角にしてください)

検証は、まだしていませんので、見当違いやすでにご存知でしたら、申し訳ありません。

【50808】Re:起動済みのIEのソースの取得について
お礼  みつを  - 07/8/16(木) 18:40 -

引用なし
パスワード
   かみちゃんさま

Ken3のページは隅々まで見ているつもりでしたが、
やりたいことに似ている感じがするので、こちらのページを
参照し再度トライしてみたいと思います。

また結果が出ましたらご報告させていただきます。

ありがとうございます!

【50812】Re:起動済みのIEのソースの取得について
発言  ichinose  - 07/8/16(木) 23:31 -

引用なし
パスワード
   こんばんは。


>ExcelのVBAで下記内容のマクロを作成していましたが
>壁にぶち当たってしまったので質問させてください。
>
>動きとしては、あるWebページに移動して検索を行う動作をしたい。
>その前段階として、そのページには必ず手順を踏んで遷移しないと
>該当のWebページには進めないページになっている。
>
>IE.Navigate2で二回目に開いたページの"IE.Document.Links(0).Click"
>を行うと新規でIEが起動するようになっています。
>その新規で開いたIEを何とかVBA上で操作が行えるようにしたいのですが
>どうやって、innerHTMLを取得していいのかわからず壁にぶち当たっています。

IEのイベントを使用した方法です。

新規ブックにて試してください。
まず、この新規ブックに対して参照設定を行います。
VBEの「ツール」---「参照設定」にて
「Microsoft Internet Controls」にチェックを入れてください。

コードは、標準モジュールではなく、

Thisworkbookのモジュールに記述します。

'====================================
Option Explicit
Public WithEvents ie As InternetExplorer
Dim iex As InternetExplorer
Sub コマンド1_Click()
  Dim ans, idx
  Dim txt As String
  Dim regex As Object
  Set ie = CreateObject("InternetExplorer.application")
  ie.Visible = True
  ie.Navigate2 "http://www.vbalab.net/vbaqa/c-board.cgi?id=excel"
'          ↑半角のhttpに直して実行すること
  Do While ie.Busy = True Or ie.readyState <> 4
    Loop
  ie.document.Links(0).Click
  Do While iex.Busy = True Or iex.readyState <> 4
    Loop
  ans = Split(iex.document.body.innerText, vbCrLf)
  For idx = LBound(ans) To UBound(ans)
    Cells(idx + 1, 1).Value = ans(idx)
    Next
  iex.Quit
  ie.Quit
  Set iex = Nothing
  Set ie = Nothing
  
End Sub
'===============================================================
Private Sub ie_NewWindow2(ppDisp As Object, Cancel As Boolean)
  Set iex = New InternetExplorer
  Set ppDisp = iex
End Sub


コマンド1_Clickを実行してみてください。

「VBA質問箱基本ポリシー 」がシートに表示されます。

対象となるサイトがご自分の管理下のサイトなら、良いですが、

そうでない場合は、この手のコードはメンテが大変ですよ!!

最近は、公共的なサイトは定期的に内容を変えている場合もありますから・・・。

まっ、試してみてください。

【50823】Re:起動済みのIEのソースの取得について
お礼  みつを  - 07/8/17(金) 10:04 -

引用なし
パスワード
   ichinose様

新たな方法の助言ありがとうございます!
実際にこちらの方法試してみたいとおもいます。
また、いただいたソースも勉強させていただきますm(__)m


結果後日ご報告させていただきます

【50867】Re:起動済みのIEのソースの取得について
お礼  みつを  - 07/8/20(月) 21:58 -

引用なし
パスワード
   本日アドバイスをいただきました結果、とりあえず第一の壁を
乗り越えることができました。まずはお礼をさせていただきます。

結果的には、かみちゃん様のアドバイスのページの動きで実施しました。

動きとして、
  For Each w In win.Windows
    Debug.Print TypeName(w), w.LocationURL
    If Right$(w.LocationURL, 5) = "excel" Then
    End If
この動きで、該当ページの抜き出しまで行えていたので
objIE = w.document.*
で目的のソースの抜き出しを行いました。

また、 ichinose様のアドバイスをいただきました
ソースも実際にペーストして動かしてみました。
ie_NewWindow2の使い方も理解することが出来、またソースの書き方
も学ばせていただきました。

また、行き詰まり増したら相談させていただくことがあるかと思いますが
ご指導のほどよろしくお願いいたしますm(__)m

5426 / 13646 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free