VBAで、webページを操作するマクロを組んでいます。
具体的な手順としては、セルの商品番号をweb上の検索ボックスに入力して、別ウィンドウで開いた情報を「すべて選択」「コピー」してexcellの別シートに「貼り付け」までを行うものなのですが、
別ウィンドウで開いたページに対して、Sendkeysを行うにはどうやったらいいのでしょうか。
仮に、入力ページをA、結果ページをBとしたとき、Aに対しての入力とBページの表示までは出来ているのですが、Bページに対しての操作が出来ません。
ちなみに、事情があってwebクエリはあえて使っていません。
どなたか、いい解決方法・プロシージャをご存知でしたらよろしくお願いします。
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 …
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 ソースは取得し、クリップボードに転送してからペースト、、
というのでも良いかもしれません。
では。
すごい!驚きです!これなら自分の作りたかった物が組めそうです。
教えていただいたURLのほうは、まだ私のレベルだと理解できないこともありますが、でも、すごく勉強になります。
ありがとうございました!
No.1
- 回答日時:
ウインドウタイトルで表示される文字列がわかっていれば
dim ws
set ws = CreateObject("WScript.Shell")
ws.AppActivate("タイトル文字列")
で指定したウィンドウをアクティブにできます。
ウィンドウをアクティブにできれば、
Sendkeys ができます。
IEオブジェクトを作って起動しているのだったら、
状況によって
IEオブジェクトから内容を引っ張ってこれるような気がしますが・
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) エクセルデータからの必要項目抽出方法を教えてください 6 2022/08/12 15:55
- 確定申告 e-taxで開業届を出す方法がわかりません 1 2022/06/01 19:00
- Visual Basic(VBA) VBAでWEBサーバー上に保存されたPDFファイルのリンク有効チェックについて 1 2022/11/11 16:04
- その他(パソコン・スマホ・電化製品) Webページ印刷時にヘッダー・フッターをつけたい 1 2022/04/25 21:35
- PDF EXCEL ページを指定してPDF出力するVBAを教えてください。 2 2023/02/09 10:27
- Visual Basic(VBA) VBAでPDFのアクティブページ番号取得 1 2023/05/25 12:41
- その他(プログラミング・Web制作) パイソンでのプログラミングについて 3 2022/08/11 20:31
- Visual Basic(VBA) VBAコードを張り付け後のエクセルの進め方 2 2023/02/07 18:24
- Word(ワード) Google ドキュメントで改ページを挿入する方法 1 2022/05/25 19:22
- C言語・C++・C# プログラミングの問題です。至急教えてください。 /***から***/の部分をプログラミングにしてほし 1 2022/10/13 11:48
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルでの先頭文字について
-
セルに入力したファイル名を参...
-
エクセルで全部の数字を3倍したい
-
スピンボタンのコピー
-
エクセル VBA 特定の範囲内に一...
-
HYPERLINKのリンク先のセル範囲...
-
Excelで数値→文字列変換で指数...
-
テキストボックス内の文字のふ...
-
エクセルでグラフタイトルが折...
-
Excelで行ごとコピー、同じ行を...
-
Excelの関数について、特定の文...
-
PDFの一部を切り取って別のシー...
-
エクセル
-
塗りつぶしの色をコピーするには
-
数字がセルの左側に寄っていて...
-
エクセルグラフの一括設定。
-
エクセルにおける、グラフの指...
-
エクセル 入力中に表示されな...
-
エクセル 指定した文字列を含...
-
C+vのvは英語で何の頭文字...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルの数式で教えてください。
-
スピンボタンのコピー
-
エクセルVBAを使いセルを指...
-
HYPERLINKのリンク先のセル範囲...
-
エクセルVBA: 別のセルからの...
-
エクセルで全部の数字を3倍したい
-
エクセル VBA 特定の範囲内に一...
-
セルに入力したファイル名を参...
-
データベース関数のCriteria(...
-
エクセルでの先頭文字について
-
VBAからIEを操作する時のウィ...
-
エクセルで最後に入力したセル...
-
& と "" の使い方
-
Excel関数 - 文字列のなかに6ケ...
-
エクセルについて、a1からa10の...
-
【エクセル2016】行数を指定し...
-
Excelのマクロを使わず、数式内...
-
エクセル 同一セル内の特定文...
-
エクセルVBA 結構初歩的なこと...
-
Excelで数値→文字列変換で指数...
おすすめ情報