• ベストアンサー

VBAからIEを操作する時のウィンドウの選択の仕方がわかりません

VBAで、webページを操作するマクロを組んでいます。 具体的な手順としては、セルの商品番号をweb上の検索ボックスに入力して、別ウィンドウで開いた情報を「すべて選択」「コピー」してexcellの別シートに「貼り付け」までを行うものなのですが、 別ウィンドウで開いたページに対して、Sendkeysを行うにはどうやったらいいのでしょうか。 仮に、入力ページをA、結果ページをBとしたとき、Aに対しての入力とBページの表示までは出来ているのですが、Bページに対しての操作が出来ません。 ちなみに、事情があってwebクエリはあえて使っていません。 どなたか、いい解決方法・プロシージャをご存知でしたらよろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • KenKen_SP
  • ベストアンサー率62% (785/1258)
回答No.2

こんにちは。KenKen_SP です。 検索フォーム経由ではなく、検索結果のページをコードで直接開けないですか? 例えば、教えてGooなら http://oshiete1.goo.ne.jp/kotaeru.php3?q= URL の後ろに ? マークがあります。この記号以下は CGI に渡すパラメータです。 q= の後ろに質問番号が入りますので、予め質問番号が分かっている場合は、 この URL に質問番号を連結してやれば、直接開くことができます。 仮に、質問番号が A1 セルに入っているなら IE.Navigate "http://oshiete1.goo.ne.jp/kotaeru.php3?q=" & Range("A1").Value みたいなコードで検索結果ページを開くことができると思います。同様に、商品番号 を渡すパラメータがあるはずですから、探して見て下さい。CGI にパラメータを渡す 方法が Get でも Post の場合でも検索フォームの HTML ソースを見れば分かります。 取り合えず、一度検索フォームの HTML ソースを見てみましょう。 これが可能なら、コードで IE オブジェクトを作り、直接検索結果のページを開くこ とができますので、IE のウインドウハンドルやウインドウタイトルは簡単に取得 できます。 簡単な例です。A1 セルの値を Google で検索し、結果を A5 セルに貼り付けます。 Option Explicit Private Declare Function SetForegroundWindow Lib "user32.dll" ( _   ByVal hWnd As Long _ ) As Long    Sub Sample()   Dim IE   As Object   Dim strURL As String   Dim lngRet As Long      Const READYSTATE_COMPLETE = &H4      strURL = "http://www.google.com/search?hl=ja&lr=lang_ja&ie=Shift_JIS&q="   strURL = strURL & Range("A1").Value       Set IE = CreateObject("InternetExplorer.application")   IE.Visible = True   IE.navigate strURL   Do     DoEvents   Loop Until Not IE.Busy And IE.readyState = READYSTATE_COMPLETE      ' IE のウインドウをアクティブにする   lngRet = SetForegroundWindow(IE.hWnd)   If lngRet <> 0 Then     ' アクティブにできたらキー送信して結果をコピー     SendKeys "^a", True     SendKeys "^c", True     ' 貼り付け     Range("A5").Select     ActiveSheet.Paste   End If   Set IE = Nothing End Sub どうしても検索フォームを経由し、新しい IE を開く必要がある場合は、 参考 URL 先の記事が参考になると思います。 参考 URL: http://www.ken3.org/cgi-bin/group/vba_ie.asp ちなみに、SendKeys を使わない方法としては、IE.Document.body.innerHTML で HTML ソースは取得し、クリップボードに転送してからペースト、、 というのでも良いかもしれません。 では。

korn333
質問者

お礼

すごい!驚きです!これなら自分の作りたかった物が組めそうです。 教えていただいたURLのほうは、まだ私のレベルだと理解できないこともありますが、でも、すごく勉強になります。 ありがとうございました!

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (1)

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.1

ウインドウタイトルで表示される文字列がわかっていれば dim ws set ws = CreateObject("WScript.Shell") ws.AppActivate("タイトル文字列") で指定したウィンドウをアクティブにできます。 ウィンドウをアクティブにできれば、 Sendkeys ができます。 IEオブジェクトを作って起動しているのだったら、 状況によって IEオブジェクトから内容を引っ張ってこれるような気がしますが・

korn333
質問者

お礼

なるほど、タイトル文字列からの指定も出来るのですね。ありがとうございます!

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • VBAでIEを操作したいです。

    VBAでIEを操作したいです。 エクセルでデータ管理をしております。 VBA・マクロ等を使用して、ウェブページの入力フォームに自動で入力、ウェブページの結果を再度エクセルに返すことはできますでしょうか? こちらがサイトになります。 モノレート http://mnrate.com/ こちらのサイトはアマゾンの商品の年間の価格推移を調べることができます。 ここに商品の「JANコード」(13ケタの商品ごとについているバーコード)を入力して、「グラフを見る」というボタンを押すと表示されます。 例えば、「Smap!Tour!2002! [DVD] 」という商品が知りたいとします。 その場合「4988002446582」(DVDの商品コード)を入力して「グラフを見る」を押します。 その後、ページが切り替わって切り餅のページが表示されると思います。 表示されたページの商品写真の横にあるASIN:「B00008GEUD」 という数字と、表示されたアドレス「http://mnrate.com/item/aid/B00008GEUD」をエクセルに返したいです。 話を整理させていただきます。 現在エクセルでは、A1セル~A100セルに「JANコード」(13ケタの商品ごとについているバーコード)が入力されております。 そこで「マクロ実行」をします。 そうすると、自動でIEが起動してB1セル~B100セルに「ASINコード」(例:B00008GEUD)、C1セル~C100セルに「ハイパーリンク」(例:http://mnrate.com/item/aid/B00008GEUD) ※エクセルから直接ジャンプできるように青色になったもの を自動で入力。 すべて完了後、IEが閉じてその後MSGで「完了しました」と表示される。 「入門者のExcel VBA」という本と、「EXCEL VBAでIEを思いのままに操作できるプログラミング術」という本を買って、一通り読み切ったのですが難しくて困っております。 分かる方おられましたら宜しくお願い致します。 最初だけしかわかりませんでした。 'IEの起動 Set ie=CreateObject("InternetExplorer.Application") ie.Visible=True 'URLへジャンプ ie.Navigate "http://mnrate.com/"

  • VBAでIEを操作したいです。

    エクセルでデータ管理をしております。 VBA・マクロ等を使用して、ウェブページの入力フォームに自動で入力、ウェブページの結果を再度エクセルに返すことはできますでしょうか? こちらがサイトになります。 モノレート http://mnrate.com/ こちらのサイトはアマゾンの商品の年間の価格推移を調べることができます。 ここに商品の「JANコード」(13ケタの商品ごとについているバーコード)を入力して、「グラフを見る」というボタンを押すと表示されます。 例えば、「越後製菓 生一番 切り餅 1kg 」という商品が知りたいとします。 その場合「4901075022569」(切り餅の商品コード)を入力して「グラフを見る」を押します。 その後、ページが切り替わって切り餅のページが表示されると思います。 表示されたページの商品写真の横にあるASIN:「B00305HGSG」 という数字と、表示されたアドレス「http://mnrate.com/item/aid/B00305HGSG」をエクセルに返したいです。 話を整理させていただきます。 現在エクセルでは、A1セル~A100セルに「JANコード」(13ケタの商品ごとについているバーコード)が入力されております。 そこで「マクロ実行」をします。 そうすると、自動でIEが起動してB1セル~B100セルに「ASINコード」(例:B00305HGSG)、C1セル~C100セルに「ハイパーリンク」(例:http://mnrate.com/item/aid/B00305HGSG) ※エクセルから直接ジャンプできるように青色になったもの を自動で入力。 すべて完了後、IEが閉じてその後MSGで「完了しました」と表示される。 「入門者のExcel VBA」という本と、「EXCEL VBAでIEを思いのままに操作できるプログラミング術」という本を買って、一通り読み切ったのですが難しくて困っております。 分かる方おられましたら宜しくお願い致します。 最初だけしかわかりませんでした。 'IEの起動 Set ie=CreateObject("InternetExplorer.Application") ie.Visible=True 'URLへジャンプ ie.Navigate "http://mnrate.com/"

  • セキュリティ警告 エクセルVBAでIE操作

    こんにちは。 エクセルVBAでIEを操作してます。 その際、あるサイトのページを表示させようとすると 「セキュリティで保護されたWebページコンテンツのみを表示しますか?」 という警告するウィンドウが開いて、マクロが止まってしまいます。 何か良い対策はないでしょうか? 例えば、 1.このウィンドウを出さないようにプログラムする 2.このウィンドウに「はい」と「いいえ」ボタンがあるので、ウィンドウが出たときには常に「はい」を押す ちなみに、VBAではなく、手動でWebページにアクセスした場合はセキュリティ警告は表示されません。 不足した情報があれば教えてください。WebページのURLは会員制サイトのためここには書けません。 以上です。よろしくお願いします。 -- エクセル2003

  • IEでマクロみたいに操作できますか?

    ど素人で申し訳ありません ウエブページを操作してデータ入力をするのがめんどくさいので ウエブ上で操作したのと同じようなものをマクロ化できないかな と思っているのですが技術的に何がわかれば可能ですか? それともこういったこと事体無理なものなんでしょうか?

  • VBAによるIE操作について

    VBAによるIE操作について WEBブラウザの表示が完了しているかを確認する方法で以下を利用しています。 While objIE.Busy = True Or objIE.ReadyState <> 4: DoEvents: Wend Set objDoc = objIE.Document Do Until objDoc.ReadyState = "complete": DoEvents: Loop これで完了するまで処理を待つのですが、たまにブラウザが読み込み状態で固まってしまうことがあります。 F5で更新すると再度読み込みを行い、処理が正常に戻るのですが、固まってしまった場合のプログラムでの対処法はないでしょうか? 10秒間ループし続けたらsendkeysでF5を押下するなど色々考えたんですが、うまく表現できません>< どなたか分かる方ご教授お願いします!

  • VBAでアプリを自動操作したい

    ネットバンクなどの「httpsから始まる認証IEページ」をマクロで 操作したいと思っています。参考画像もあわせて載せておきます。 ログインや取引などをVBAで自動で操作したいのですが、画像の ようにツールなどのメニューがないためソースを取得することができません。 マウス操作を記憶させて自動的に動かす方法ではなくマクロで操作したい のですが、こういったページでもVBAで自動操作ができるものなのか教えて いただきたいと思います。

  • VBAの記述でフォームを操作させたい

    検索用フォームに検索結果表示用のボタンを配して利用しています。私のスキルのレベル問題から全てをマクロ操作で行える様、皆様からアドバイスを頂きまして使える様にはなりましたが。しかし、マクロのイベント欄の左に警告マークが表示(固定表示)されますので、早急に表示されない方法で使用したいと思っております。誠に勝手申しますがアドバイスを頂けませんでしょうか。 [操作したいフォームの構成とVBA記述で実現したいこと] 1、検索用フォームの構成 ・検索用フォーム名:検索Aフォーム ・検索結果フォーム表示用ボタン名:スタート ・コンボボックス名:コンボa、コンボb、コンボc ■やりたいこと 「検索Aフォームに配したコマンドボタンを使って」 a、検索Aフォームの最小化 b、結果Aフォームの表示 c、コンボボックスの入力表示を消去 2、検索結果フォームの構成 ・検索結果フォーム名:結果Aフォーム ・検索用フォーム表示用ボタン名:バック ※結果Aフォームの参照クエリ名:検索クエリ ■やりたいこと 「結果Aフォームに配したコマンドボタンを使って」 a、検索Aフォームを元のサイズに戻す b、結果Aフォームの最小化 既にマクロで作ったフォームのVBAを探してみましたが、マクロで作成したコマンドボタン名やコンボボックス名が見つけられない等を経験しました。自身でよく使うマクロの記述を教えていただければ、逆引き感覚で少しは早く覚えられるのではと思っています。以上ですが、宜しくお願いします。

  • EXCEL 2003におけるVBA,マクロ、改ページ操作と印刷設定について

    EXCEL 2003における VBA、マクロについての質問です。 CSVデータを読み込んで、1度マクロを作動させて、 再度違うCSVデータを取り込んで表示したいので、シートフォーマットプロシージャを設定しましたが、改ページの調整が、わからないのでページ操作が毎回おかしくなってしまいますので誰か教えていただけないでしょうか。 '####################################################### ' セルフォーマット プロシージャ '####################################################### Sub clearcell() Worksheets("Sheet1").Activate Selection.CurrentRegion.Select Selection.ClearContents Selection.Borders.LineStyle = xlLineStyleNone ★★ 'ページ操作についても、もとの状態にしたい' 'もしくは、1ページ何列で、何行までという指定が 'したいです。' ★★ End Sub 悩み(3) 印刷プロシージャにおいて、詳細な印刷設定が行いたい。 '####################################################### ' 印刷 プロシージャ '####################################################### Sub copypage() ActiveWindow.SelectedSheets.PrintOut Copies:=1 End Sub このような、印刷はできましたが、 詳細を設定できる、プロシージャの例があれば、教えて いただければ幸いです。 よろしくお願いいたします。

  • VBAからWEB操作

    わかりにくい質問でしたらすみません。 VBAからWEB操作ができることを最近知り、 VBAで操作できる範囲のことから JavaScriptの勉強を始めています。 JavaScriptを使って他社が作ったWEBページの テキストボックスに文字を入れたり オプションボタンをチェックしたり するように作っています。 VBAの記述では以下のように使っています。 For Each obj inobjie.document.getelementsbytagname("input") if obj.type="radio" and obj.value="2" then obj.checked=true endif next ホームページからもらった記述を自分の環境に合わせたものなのですが getelementsbytagnameに"input"を入れると typeが取れるという感覚がなくて Nameが取れたりもしますし、何をどこまで取れるのかわからないのです。 "option"を入れたら 何が取れているんだろう?など… "a"だと、<a></a>の中身が取れているんだな…くらいまではなんとなくわかりました。 WEBページのソースを確認して、 テキストボックスの名前を調べたりしていますが Nameが設定されていなかったりもしますし そのときは、デバックでobjをウォッチしてひとつひとつ見たりしてるんですが こんな方法しかないのかなぁ?と思っています。 VBAを独学していたときは、勉強できるホームページがたくさんあったりしましたが VBAからのWEB操作については 独学ではこんな感じで進めるしかないのでしょうか 幅広い回答いただけるとうれしいです。 ※JavaScriptのほうにも、同じ趣旨の質問を書かせていただきました

  • vbaでIEの名前を付けて保存(A)をしたい

    VBA で IEの通知バー を操作したいです。 SendKeys で 通知バーの 保存(S) はできたのですが、 保存(s)の右隣の ▼ をクリックするとでてくる、 名前を付けて保存(A) の方法がわかりません。 どのようなキーをおくればよいのでしょうか。 他の質問をみると、SendKeysではなく ○○がよいですよ みたいな内容しか見つからず、 回答をみつけることができなくて困っておりますのでよろしくお願いいたします。

このQ&Aのポイント
  • 親がお小遣いをもらえない中学生女子が苦しんでいる
  • 親からお金をもらえず、テストの交通費や習い事代も自分で出さないといけない
  • 弟には懐が深いのに、なぜ自分にはお金が回ってこないのか、悩みが止まらない
回答を見る

専門家に質問してみよう