
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で質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
HYPERLINKのリンク先のセル範囲...
-
ワードからエクセルへのハイパ...
-
スピンボタンのコピー
-
Excelで数値→文字列変換で指数...
-
Excelで行ごとコピー、同じ行を...
-
塗りつぶしの色をコピーするには
-
エクセルでグラフタイトルが折...
-
テキストボックス内の文字のふ...
-
C+vのvは英語で何の頭文字...
-
エクセル 指定した文字列を含...
-
勝手にリンクするテキストボッ...
-
数字がセルの左側に寄っていて...
-
エクセルにおける、グラフの指...
-
負のデータが含まれている場合...
-
たくさん作った同じ設定のグラ...
-
【Excel】貼り付けた画像がいつ...
-
パワーポイントに貼り付けたエ...
-
エクセルのグラフの一部拡大
-
コピーされたセルの文字が途中...
-
VBAのテキストボックスに文字列...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
スピンボタンのコピー
-
エクセルVBAを使いセルを指...
-
エクセルで全部の数字を3倍したい
-
HYPERLINKのリンク先のセル範囲...
-
データベース関数のCriteria(...
-
エクセルでの先頭文字について
-
エクセル VBA 特定の範囲内に一...
-
【頭の良い人へ】同セル内の文...
-
エクセルVBA: 別のセルからの...
-
ワードからエクセルへのハイパ...
-
エクセル マクロでセルへ入力し...
-
countif関数で離れた場所を検索...
-
エクセルで最後に入力したセル...
-
少数点の表示形式について
-
セルに入力したファイル名を参...
-
if関数の連続を単純化するには...
-
こんな方法を探しています。
-
条件付き書式
-
Excelで数値→文字列変換で指数...
-
Excelで行ごとコピー、同じ行を...
おすすめ情報