- ベストアンサー
EXCEL VBA IEからダウンロード
まず以下のコードを見てください(一部を抜粋) objIE.Navigate URL02 Do While objIE.Busy = True DoEvents Loop objIE.ExecWB OLECMDID_SELECTALL, OLECMDEXECOPT_DODEFAULT objIE.ExecWB OLECMDID_COPY, OLECMDEXECOPT_DODEFAULT Application.Wait Now() + TimeValue("00:00:05") objIE.Quit Worksheets("商品情報").Select Range("A2:J100").Clear Range("A2").Select Application.Wait Now() + TimeValue("00:00:05") Application.SendKeys "^v", True とりあえずこれで使えてはいるのですが、これだと一度IEを終了することになるので、終了せずにエクセルのシートにペーストしたいと思いobjIE.Quitを削除しました。 そうしたらコピーまではするのですがペーストしなくなってしまいました。 なんとかIEを起動したままでペーストしたいのですが、どう直したらいいですか?教えてください。 宜しくお願いします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
objIE.Quit をなくして Application.SendKeys "^v", True の変わりに 普通に ActiveSheet.Paste にしたら張り付きました。 でも私の環境では hercules04さんが書かれている IEを終了させてsendkeys で貼り付ける方法ではペーストができませんでした。 なので、私の環境では、上記の方法でできましたが hercules04さんの環境では、うまくいかないかもしれませんね。。。。 ちなみに Excel2003 IE6 標準モジュールで試しました。
その他の回答 (1)
- Wendy02
- ベストアンサー率57% (3570/6232)
こんばんは。 とりあえず、 objIE.Quit の部分を、 AppActivate Application.Caption に切り替えたらどうでしょうか? 出来れば、面倒くさいとは思いますが、 objIE.Document.body.innerHTML または、 objIE.Document.body.innerText などで取得した方が無難だとは思います。そのままだと、テキスト以外のものまで貼り付けてしまう結果になりますからね。
お礼
とりあえず解決いたしました。 おっしゃるとおり、確かに objIE.Document.body.innerText の方がいいですよね。 今ダウンロードしているページにはテキストデータしかないので丸ごとコピーしていますが今後のことを考えるとより汎用性の高い形にしておく方がいいですしね。 アドバイスありがとうございました。
お礼
そうですね。 普通にActiveSheet.Pasteでいいですよね。 最初にSendKeysを使ったのでついそれにこだわってしまって思いつきませんでした。 おかげさまで上手くいきました。 ありがとうございました。