プロが教えるわが家の防犯対策術!

Excelのマクロから他ソフトのデータを取り入れています。
Sendkeysを使ってソフトのページを切替えたいんですが、ページが切り替わらないうちにページ表示後用のキーが立て続けに送られてしまい旨くいきません。

今やっているのは、起動済みオフラインのIEでHP上の目次からリンクのページ内容をつぎつぎシートへ写す処理です。
SendKeys "{tab}", True    でHPの次行の目次に移って
SendKeys "{enter}", True  でページを開いて
SendKeys "^{a}", True    全て選択
SendKeys "^{c}", True    コピー
この後Excelのシートにテキストで張付ける。
で、IEに戻ってまた"{Tab}"で次行へ移って・・

ところが2番目の"{enter}"で新ページが開き終わらないうちに3,4番目のキーが送られてしまう様です。
ページが開き終わってから次のキーを送るにはどうすればいいでしょうか?

A 回答 (2件)

sendKeysは単なるキーエミュレートなので


処理終了まで待つというようなことは難しいでしょう。
こんな感じでエクセルからオブジェクトとしてIEを
管理するのが妥当じゃないでしょうか?

Set oIE = CreateObject("InternetExplorer.application")
oIE.Visible = True
oIE.navigate2 ("http://www.yahoo.co.jp")
Do While (oIE.busy)
Application.Wait (Now + TimeValue("0:00:01"))
Loop
txt = oIE.document.body.innerText

MsgBox txt
    • good
    • 0
この回答へのお礼

これが正しいやり方なんでしょうね。
やってみます。
ありがとうございます。

お礼日時:2005/09/30 00:49

こんばんは。



>起動済みオフラインのIEでHP上の目次からリンクのページ内容をつぎつぎシートへ写す処理です。

昔、私もそうやって、ある程度は、Application.Wait Now + TimeValue("00:00:02")[時間は任意]とやって、「概ね」成功していたけれども、やはり、IEのObjectで、 Document.all から行ったほうが確実です。自分で探すしかありませんが、Document.all の Type を抜き出して、その型から、作業方法を見つけます。慣れと、多少、HTMLの知識が必要になってきます。

ところで、
>SendKeys "^{a}", True    全て選択
>SendKeys "^{c}", True    コピー

それから、Sendkey でも、こちらは、{a} {c} と{} は必要ありませんが、#1 さんのご指摘の通り、body.InnerText で抜き出すのが簡単かと思います。

そうでなかったら、データ-外部データの取り込み-新しいWebクエリを作ったほうが楽です。
    • good
    • 0
この回答へのお礼

私もApplication.Wait でやってみたんですが、一回目は成功し二回目はダメだったりと色んな結果が出ます。
そのソフトのキー操作だけで出来る便利な方法だと思いましたが、やっぱりネットやVBAのコードを勉強しないとダメですね。(^_^;
Webクエリの方は各目次のリンク先のような一つ下の層までは取込めない様なので諦めました。

お礼日時:2005/09/30 00:50

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています