- ベストアンサー
VBAでIE操作する際にjavascriptのURLを踏んだ後にページをオブジェクトに格納して値を取得する方法
- VBAでIE操作をしている際に、javascriptのURLを踏んだ後にそのページをオブジェクトに格納して値を取得する方法について教えてください。
- 現在、VBAでIE操作を行っており、javascriptのURLをクリックした後に表示されるページをオブジェクトに格納して値を取得したいのですが、上手くいきません。
- VBAでIEを操作している際に、javascriptのURLをクリックした後に表示されるページをオブジェクトに格納して値を取得したいのですが、うまくいかない状況です。ご教授いただけませんか?
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
#1です。確かに連続で実行すると、二回に一回?CreateObjectのところで、オートメーションエラーになりますね。 ところで問題のページですが、電卓がポップアップします(他にもあるかもしれませんが、一番目についたので)。説明不足ですみません。これをコードでポップアップさせてみました。当方の環境ではポップアップロックを外す必要がありました。無名関数を使っているので、とりあえず泥臭い方法で特定して実行させてみました。変更したところだけ載せます。 Sub test() Dim myElements As IHTMLElementCollection Dim i As Long Set ie = CreateObject("InternetExplorer.Application") ie.Visible = True ie.navigate "http://www.724685.com/" IE_wait ie Set myElements = ie.document.getElementsByTagName("A") For i = 0 To myElements.Length - 1 If Left(myElements(i).href, 10) = "javascript" And InStr(myElements(i).href, "http://www.724685.com/calc/") > 0 Then myElements(i).Click Exit For End If Next i End Sub 下記の様にコードで終了させると、二回目のオートメーションエラーが出ない気もしますが、あまり検証できていません。ご参考まで。 Sub terminate() ie2.Quit Set ie2 = Nothing ie.Quit Set ie = Nothing End Sub
その他の回答 (1)
- mitarashi
- ベストアンサー率59% (574/965)
ポップアップがあるページを探すのに苦労してしまいました。 下記で、ポップアップのURLが取得できましたが、NavigateComplete2が複数回発生するのか、6回Debug.Printされました。 この時NavigateComplete2で取得される引数のURLは、目的のURL、訳の分からないURL2個、about:blank3個でした。 ご参考まで。 イベントを補足するために、クラスモジュールで、WithEventsで宣言する必要があります。 クラスモジュールを用いるか、クラスモジュールであるThisworkbookモジュール、Sheetモジュールなど(標準モジュール以外)に記述する必要があります。ここではSheetモジュールでテストしました。環境はxl2010-32bit、IE10、Windows7-64bitです。 'Microsoft Internet Control 'Microsoft HTML Object Library 'に参照設定 Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) Public WithEvents ie As WebBrowser Public WithEvents ie2 As WebBrowser Sub test() Set ie = CreateObject("InternetExplorer.Application") ie.Visible = True ie.navigate "http://www.724685.com/" IE_wait ie End Sub Private Sub ie_NewWindow2(ppDisp As Object, Cancel As Boolean) Set ie2 = New InternetExplorer Set ppDisp = ie2 End Sub Private Sub ie2_NavigateComplete2(ByVal pDisp As Object, URL As Variant) Debug.Print ie2.LocationURL End Sub Sub IE_wait(objIE As WebBrowser) Do Until objIE.readyState = READYSTATE_COMPLETE Loop Do While objIE.Busy = True DoEvents Loop Sleep 500 End Sub
お礼
回答が付かないと思っていました、ついて嬉しいです! テストできるURLを提示すればよかったですね。失礼しました。 クラスモジュールについてはよくわからないのです。すいません・・・ 頂いたコード全てをシートモジュールに貼り付けていいんですよね? コードをシートモジュールに張り付けてtestプロシージャーをを実行したら いくつかの意味ディエイトウインドウにURLが取得されました! もう一度やってみようと、testプロシージャーを実行したら オートメーションエラーになってしましました・・・ ちなみにhttp://www.724685.com/ のページはどこでポップアップが表示されるのでしょうか? 再度ご回答いただければ嬉しいです。
お礼
再度ご回答ありがとうございます。 検証してみたところ、 ie2.のオブジェクトに電卓のURLが格納されてる事を確認できました! Sub terminate() ie2.Quit Set ie2 = Nothing ie.Quit Set ie = Nothing End Sub これの追加で、オートメーションエラーの発生も防げました! クラスについてよくわからないのでこれから勉強して、 今回ご回答いただいた方法と掛け合わせて 自分のやりたいことを完成させたいと思います。 大変参考になりました。 ありがとうございます。