Excel (VBA)

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

 
(指定なし : 指定なし)
CreateObjectによるWEBページの取得について
投稿日時: 19/05/06 13:49:11
投稿者: andoandoando

お世話になっております。
 
先日webクエリでのwebページ取得をしようとしましたができませんでしたので、方向転換してCreateObjectにて試しました。
HTMLでの(リンク付きが希望)取得をしたく、下記としてみたのですが最後のActiveSheet.PasteSpecial Format:="HTML"でエラーとなってしまいます。
何が悪いのかわかりましたらご指導いただけますとうれしいです。
 
また、このやり方でなくてもHTMLが取れれば良いのでどこか参照になるところありましたら教えていただけますと助かります。
以上よろしくお願いいたします。
 
 
Sub test3()
 
Set ie = CreateObject("InternetExplorer.Application")
ie.Visible = True
ie.navigate "http://www.yahoo.co.jp"
 
'表示終了待ち
Do
DoEvents
Loop Until (ie.Busy = False) And (ie.readyState = 4)
 
 
    ie.ExecWB 17, 0 'OLECMDID_SELECTALL = 17 全てを選択
    ie.ExecWB 12, 0 'OLECMDID_COPY = 12 コピー
    Sheets.Add 'テスト用のシートを新規追加する
    ActiveSheet.Name = "FormatHTML" 'シートに名前を付ける
    Range("A1").Select
    ActiveSheet.PasteSpecial Format:="HTML"
     
End Sub

回答
投稿日時: 19/05/07 07:20:21
投稿者: 半平太

>下記としてみたのですが最後のActiveSheet.PasteSpecial Format:="HTML"で
>エラーとなってしまいます。
 
当方もトライしてみましたが、エラーとなりますね。不思議。
 
ググってみると同じような質問に、ichinoseさんが一案提示されていました。
          ↓
>http://www.vbalab.net/vbaqa/c-board.cgi?cmd=ntr;tree=10850;id=excel
>【10850】WebBrowserコントロールで表示したWEB本文のコピー方法 ひら
 
最後の方にある「04/3/8(月) 18:06」の案は、WebBrowserを使う方法ですが、
URLが"http://www.yahoo.co.jp"でも貼り付けられました。
 
 「.SetFocus」に意味がある様でしたが、私のレベルでは神髄は分かりません。
 
WebBrowserにもExecWBメソッドがあるので、Sendkeys命令を
それに換えてテストしましたが、これも問題なかったです。
 
・・と言うことで、その案を応用してみたらどうですか?
 
個人的には、WebページのHTML形式貼り付けには余り興味がないので、
深入りしませんけど・・(その後の利用方法が分からない)

回答
投稿日時: 19/05/07 10:53:59
投稿者: baoo

この問題は特定のページで発生します。
YahooやGoogleでは発生しますが、Amazonでは発生しません。
ですので、andoandoandoさんが実際に取得したいページで発生するかを
見極める必要があります。
 
問題はOLECMDID_SELECTALLが動作していないことです。
Yahooページが表示されるところで止めて、Ctrl+Aキーを押しても
ページが選択されません。
ページの外側をクリックすると選択出来るようになりますので、
表示された状態でページ内部がアクティブになっていないのだと思いますが、
正しい理由はわかりません。
 
暫定的ですが、OLECMDID_SELECTALLの前に
ie.Document.body.setActiveを入れると
動作するようになります。

回答
投稿日時: 19/05/09 11:54:52
投稿者: hatch315
メールを送信

 
エクセルVBAでHTTPリクエストをする最も簡単なプログラム
 
https://tonari-it.com/excel-vba-http-request/

投稿日時: 19/05/09 21:48:21
投稿者: andoandoando

半平太 様
baoo 様
hatch315 様
 
ご返信ありがとうございます。
ご連絡おそくなりました。
 
その後、いくつかのサイトを回ってプログラムが動くようになりました。
ありがとうございました。
 
動くようになったのは待ち時間調整の部分からこのようにしました。
 
以上よろしくお願いいたします。
 
 
 Do Until ie.readyState = READYSTATE_COMPLETE
        DoEvents
    Loop
    Do Until ie.document.readyState = "complete"
        DoEvents
    Loop
    ie.ExecWB 17, 0
    ie.ExecWB 12, 2
     
    Sheets.Add 'テスト用のシートを新規追加する
    ActiveSheet.Name = "FormatHTML" 'シートに名前を付ける
    Range("A1").Select
     
    ActiveSheet.PasteSpecial Format:="HTML", link:=False, DisplayAsIcon:=False
     
    Application.CutCopyMode = False