VBAのIEで画面をスクロールする方法について 削除
Message#2 2014年9月2日(火)16時20分 From: 管理人 |
みるめーくのメッセージ(#1)への返事 > VBAでブラウザを開くまではできたのですが、ページの最後までスクロールするにはどうしたらいいでしょうか? まず、ページの高さを取得します。 その後にjavaScriptのscrollToメソッドを利用して、スクロール位置を指定座標へ移動します。 そして、VBAのIEオブジェクトのDocument.Script.setTimeout で実行するとスクロールすることができます。 scrollTo(X座標, Y座標),処理待ち時間 X座標は0でY座標にページの高さを設定すれば、最下部まで移動してくれます。 pageHeight(ページの高さ)=objIE.document.body.scrollheight 1000は実行までの処理待ち時間になります。1000は1秒ですので、1秒後にスクロール処理をしています。 sub test() Dim objIE As InternetExplorer Set objIE = CreateObject("InternetExplorer.Application") objIE.visible = True objIE.navigate "http://www.vba-ie.net/" Do DoEvents() Loop While objIE.busy or objIE.readyState <> 4 pageHeight = objIE.document.body.scrollheight objIE.Document.Script.setTimeout "javascript:scrollTo(0," & pageHeight & ");",1000 End Sub ツイッターページなどスクロールが延々と続くようなサイトでスクロールしたい場合はループ処理で対応できます。 こちらでは、10回ループ処理させていますが、ループ処理の待ち時間はjavascriptの待ち時間より長く設定してください。 javascritの待ち時間が長ければ、ループ処理が早く終わってしまうので、正常に処理されません。 必ず間を空けて処理してみてください。 #If VBA7 Then Private Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal ms As LongPtr) #Else Private Declare Sub Sleep Lib "kernel32" (ByVal ms As Long) #End If sub test() Dim objIE As InternetExplorer Set objIE = CreateObject("InternetExplorer.Application") objIE.visible = True objIE.navigate "http://www.vba-ie.net/" Do DoEvents() Loop While objIE.busy or objIE.readyState <> 4 pageHeight = objIE.document.body.scrollheight For i = 1 To 10 objIE.Document.Script.setTimeout "javascript:scrollTo(0," & pageHeight & ");",1000 sleep 2000 Next i End Sub |
上のメッセージを削除します。
よければパスワードを入力し、削除ボタンをクリックしてください。