ExcelのVBAでIEのWeb操作

このQ&Aのポイント
  • ExcelのVBAで、A1~A10のセルに入っている数値を指定のURLのお問い合せ番号の入力欄に自動でセットし、検索ボタンを押す方法が分かりません。
  • 以下のプログラムでは、目的のURLに移動することはできますが、その後の入力とボタンクリックの方法が分かりません。
  • アドバイスをいただけると幸いです。
回答を見る
  • ベストアンサー

Excel の VBA で、IEのWeb操作

ExcelのVBAで、A1~A10 のセルに入っている数値を下記 URL の「お問い合せ番号」の入力欄に自動でセットして、「検索」のボタンを押したいのですが、方法が分かりません。 http://www2.fukutsu.co.jp/inq/INQJJ120.html 下記のプログラムで表示までは出来るのですが、それから先の入力とボタンクリックの方法が分かりません。 何かアドバイスを頂けると幸いです。 > Dim oIE As Object > > 'IE起動 > Set oIE = CreateObject("InternetExplorer.Application") > oIE.Visible = True > > '目的のURLへ > oIE.Navigate "http://www2.fukutsu.co.jp/inq/INQJJ120.html" > > '完全表示まで待つ > While oIE.Busy: Wend > While oIE.document.readyState <> "complete": Wend

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

  • ベストアンサー
  • DOUGLAS_
  • ベストアンサー率74% (397/534)
回答No.2

#15日から拝見しておりますが、#1 さんからのお返事がないようですので、ちょっと横から口出しさせていただきますね。  そもそも、#1 さんのご回答は、ちょっと示唆深いように見受けられるのですが、 >例えば~~でしたら とお書きのように、そのままやってしまうと NG ですね。 >上記の2つを試したのですが、以下のエラーが出ます。  ちゃんとお示しの URL の html ソース をご覧になりましたか?  そこには、「name="toino"」なんて記述はありませんよね。  お示しの URL の場合は、 <FRAME src="INQJJ120.jsp" name="INQJJ120" marginwidth="1"> と書いてあるところが、 >「お問い合せ番号」の入力欄 の実態です。  実際には、 http://www2.fukutsu.co.jp/inq/INQJJ120.jsp という ページ になりますが、この ページ の html ソース には、#1 さんがお書きの コード がそのまま出ております。  ですから、 http://www2.fukutsu.co.jp/inq/INQJJ120.jsp の ページ を読み込むようにすれば、「oIE.Document.all.toino」が有効になります。 >なお、「 toino 」という名前は、 >10個の入力欄すべてに同じ名前が付けられているので、 >今回の指定方法では特定出来ないような気がするのですが。  その通り! ちゃんと、ぃぃトコロに気が付いていらっしゃるではないですか。  「oIE.Document.all.toino」のままでは単なる "[Object]" ですね。  [デバッグ(D)] - [ウォッチ式の追加(A)...] で、[式(E):] に「oIE.Document.all.toino」を入力して、[OK] してみてください。  ページ を読み込んだ段階で ウォッチ ウィンドウ を見ると、「oIE.Document.all.toino」の左の「+」を クリック すると、配下に length 10 Item 1 ~ 10 というものが見てとれます。  これが >「お問い合せ番号」の入力欄 ですね。 oIE.Document.all.toino.Item(1) あるいは、単に oIE.Document.all.toino(1) で、実態を掴むことができます。  ただし、「Item 1 ~ 10」とはなっていますが、配列の引数は「0」から始りますので、「Item 1」は「oIE.Document.all.toino(0)」になります。  さて、 > 実際には、 >http://www2.fukutsu.co.jp/inq/INQJJ120.jsp >という ページ になります と書きましたが、お示しの VBA コード の「oIE.Navigate」の後に、この URL を指定してやるのが簡単かとも存じますが、このような作りの ページ(フレームページ)の場合は、 oIE.Document.frames(1) で <FRAME src="INQJJ120.jsp" name="INQJJ120" marginwidth="1"> を掴むことができます。  従って、お示しの VBA コード のままで行くと、 oIE.Document.frames.Item(1).Document.all.toino(0).Value = "ほげげ" でイケマスね。 # suffre さん、大きなお節介失礼いたしました。 #  <(_ _)>

u-hitoshi
質問者

お礼

DOUGLAS_ さん、ありがとうございます! ばっちり、目的を果たす事が出来ました! 感謝、感激です! 「ウルトラスーパーベストアンサー」の指定をさせて頂きたい程です。 重ねて、お礼申し上げます。 ありがとうございました。

その他の回答 (1)

  • suffre
  • ベストアンサー率28% (259/919)
回答No.1

入力は、例えば <INPUT type="text" size="20" maxlength="13" name="toino" value=""> でしたらnameがtoinoなので、  oIE.Document.all.toino.Value = "ほげげ" で、ボタンクリックは <INPUT type="submit" name="btn1" value="検 索" onClick="return search()"> のnameがbtn1なので、  oIE.Document.all.btn1.Click で行けます。

u-hitoshi
質問者

お礼

suffre さん、ご回答ありがとうございます。   oIE.Document.all.toino.Value = "ほげげ"   oIE.Document.all.btn1.Click 早速、上記の2つを試したのですが、以下のエラーが出ます。   実行時エラー '438':   オブジェクトは、このプロパティまたはメソッドをサポートしていません。 何か環境的にすべき事があるのでしょうか? なお、「 toino 」という名前は、10個の入力欄すべてに同じ名前が付けられているので、今回の指定方法では特定出来ないような気がするのですが。 なにかアドバイスがございましたら、よろしくお願い致します。

関連するQ&A

  • エクセル VBA で IE操作 

    エクセルVBAにて IEを操作し リンクをクリックするには どのような記述になりますでしょうか? たとえば http://okwave.jp/mypage へアクセスし画面右上 カテゴリ をクリック 次に Excel(エクセル) をクリック という具合に 画面に表示されている文字を順番にクリックしたいです。 マクロを見つけてきましたが クリックというのはどう記述していいやらさっぱりです。 Sub testIE() Dim objIE As InternetExplorer 'IEオブジェクトを準備 Set objIE = CreateObject("Internetexplorer.Application") '新しいIEオブジェクトを作成してセット objIE.Visible = True 'IEを表示 objIE.navigate "http://okwave.jp/mypage" 'IEでURLを開く Do While objIE.Busy = True Or objIE.readyState < READYSTATE_COMPLETE '読み込み待ち DoEvents Loop

  • エクセルのVBAで最終行までループする方法

    エクセルのVBAで最終行までループする方法を教えてください。 下記がコードになります。 Dim objIE As Object Set objIE = CreateObject("InternetExplorer.Application") objIE.Visible = True objIE.Navigate Range("A1").Value While objIE.ReadyState <> 4 Or objIE.Busy = True DoEvents Wend Range("B1").value = objIE.Document.all("zoom1").href

  • vbaでIEの操作

    こんばんは。やりたいことができないので教えてください。 vbaで指定のurlを開きたいです。 エクセル2003とIE8です。 Sub test001() Dim ObjIE As Object Set ObjIE = CreateObject("InternetExplorer.application") ObjIE.Visible = True ObjIE.navigate "http://jp.msn.com/" Do While ObjIE.Busy = True '表示させるまで待つ DoEvents Loop End Sub これでIEを立ち上げてURLを開けるのですが これでは新しいウインドウで開いてしまいます。 現在IEを立ち上げていて、上記のコードを実行すると 新たなタブで開きたいですが解決策はありますか? ObjIE.Visible = True が原因かと思い、これを抜かしてみましたが そうすると何も起こりません。 VBAで既に開いているIEの新しいタブでURLを開く方法をご教授ください!よろしくお願いします。

  • DocumentCompleteイベントプロシジャに制御が渡らない

    VB6(VBA)でIEを操作し、表示ページのソースの読込みの確認にDocumentCompleteイベントを使用することを考えています。それで下記のテストプログラムを作成しますたが、DocumentCompleteイベントプロシジャに制御が渡りません。 その原因をご教示して頂きたくお願いします。 Dim WithEvents objIE As InternetExplorer --------------------------------------------------------------- Private Sub CommandButton1_Click() Dim objIE As Object Set objIE = CreateObject("InternetExplorer.application") objIE.Visible = True objIE.Navigate "http://www.yahoo.co.jp/" While objIE.readyState <> 4 While objIE.Busy = True DoEvents Wend Wend objIE.Navigate "http://www.goo.ne.jp/" While objIE.readyState <> 4 While objIE.Busy = True DoEvents Wend Wend End Sub ------------------------------------------------------------- Private Sub objIE_DocumentComplete(ByVal pDisp As Object, URL As Variant) MsgBox "ソースの読込み完了" End Sub

  • ie操作 ローカルパスだとエラーになる

    ヤフーなら問題なくコードが動くのに、URLがローカルのパスだと、エラーになってしまいます。 具体的には、 *********************************************************** Sub Sample1() Set objIE = CreateObject("InternetExplorer.Application") objIE.Navigate "http://www.yahoo.co.jp/" objIE.Visible = True Do Until objIE.ReadyState = 4 Loop Do While objIE.Busy = True DoEvents Loop End Sub *********************************************************** だと、問題なく実行されるのに、 *********************************************************** Sub Sample2() strFName = MyDesktop & "\index.html" Set objIE = CreateObject("InternetExplorer.Application") objIE.Navigate strFName objIE.Visible = True Do Until objIE.ReadyState = 4 Loop Do While objIE.Busy = True DoEvents Loop End Sub ------------------------- Function MyDesktop() Dim WSH As Variant Set WSH = CreateObject("Wscript.Shell") MyDesktop = WSH.SpecialFolders("Desktop") Set WSH = Nothing End Function *********************************************************** だと、 Do Until objIE.ReadyState = 4 で オートメーションエラー 起動されたオブジェクトはクライアントから切断されました。 となります。 なぜローカルだと、エラーになるのでしょうか? 何が違うのでしょうか?

  • 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、IE操作、初心者になります

    webページの操作についての質問になります。 VBAでやりたいことです。 (1)webページを開き、指定したソースが表示されるまで、画面を更新 (2)ソース表示がされたら、指定したボタンをクリック (3)画面が移行する (4)移行したページの指定したボタンをクリック 不具合 (2)ボタンクリック後、ページは移行するが(4)のボタンが押せません。 しかし(3)のページを直接指定して開いた後に(4)の動作を行うときちんとボタンクリックが出来ます。 順番に(1)→(2)→(3)→(4)と処理を行うと(4)のボタンが押せないという状況です。 こんな感じで作成しました。 Dim objIE As InternetExplorer ' Set objIE = CreateObject("Internetexplorer.Application") objIE.Visible = True Dim strUrl As String strUrl = "●●●●●●?sc_i=shp_pc_top_mdItemRanking_01" objIE.navigate strUrl Do While objIE.Busy = True Or objIE.readyState < READYSTATE_COMPLETE Loop (1)の処理 Do While (True) If (TypeName(objIE.document.getElementsByClassName("●●●●")(0)) <> "Empty") Then Set tmp = objIE.document.getElementsByClassName("●●●●") flag = False For Each t In tmp If (InStr(t.getAttribute("class"), "●●●●") > 0) Then t.Click flag = True Exit For End If Next End If If (flag = True) Then Exit Do Application.Wait [Now() + "0:00:00.5"] objIE.Refresh Do Loop Until (objIE.Busy = False) And (objIE.readyState = 4) Loop (3)の画面移行 (4)の処理 Set objINPUT = objIE.document.getElementsByTagName("INPUT")  For n = 0 To objINPUT.Length - 1 If InStr(objINPUT(n).Value, "●●●●") > 0 Then objINPUT(n).Click Exit For End If Next Do While objIE.Busy = True Or objIE.readyState < READYSTATE_COMPLETE Loop Set objINPUT = Nothing 以上になります。 お手数ですが、どなたかご教示をお願いいたします。

  • WEB画面をエクセルのセルに貼り付けるマクロ

    過去の回答を参考にエクセルでWEB画面をすべて選択しエクセルの所定のセルに貼り付けするマクロを作成しました。処理を追加していった結果、下記のようなマクロが完成しました。ステップインで動作確認できましたが、マクロ実行から動かすと途中で止まります。 止まる箇所は、 While objIE.readyState <> READYSTATE_COMPLETE Or objIE.Busy = True DoEvents Wend DoEvents この記述でWEBが遅く開く時に対応するよう作成しましたが、ここで止まります。(抜け出せません) また、この記述を削るとステップインではうまく動きますが、マクロの実行から動かすと何回目かで objIE.ExecWB 17, 0 すべて選択するときに止まります。 どこが悪いのか教えていただけないでしょうか? 使用、作成したのは、excel2007 及びexcel2010です。どちらでも動きません。 よろしくお願い致します。 Sub test() Dim URL As String Dim URL2 As String Dim URL3 As String Dim CD As String Dim i As Integer For i = 1 To 199 CD = Worksheets("CD").Cells(i + 1, 1).Value URL2 = "貼り付けたいWEBのURL" URL3 = CD ’縦一列にコードを入力しているシート URL = URL2 & URL3 Dim objIE As Object Set objIE = CreateObject("InternetExplorer.application") objIE.Visible = True objIE.navigate URL While objIE.readyState <> READYSTATE_COMPLETE Or objIE.Busy = True DoEvents Wend DoEvents objIE.ExecWB 17, 0 objIE.ExecWB 12, 0 Sheets.Add ActiveSheet.Name = 199 - i Range("A1").Select ActiveSheet.PasteSpecial Format:="HTML" objIE.Quit Set objIE = Nothing Next End Sub よろしくお願いいたします。

  • ログイン、パスワードをセットしておきたい。

    IEの決められたサイトをよびだし、ログイン、パスワードを自動で固定の文字をセットするVBスクリプトを作成したい。 画面は下記で出ることはわかったのですが宜しくお願いします。 (尚、ツール=>インターネットオプションは対象外です) Set oIE = CreateObject("InternetExplorer.Application") oIE.Visible = True oIE.Navigate "http://wwwX.XXXXXXXX.com/XXXX/" '*** ページがロードされるまで待つ Do While oIE.busy WScript.Sleep(1000) Loop

  • VBでのIE操作

    VBでのIE操作をしようとして色々調べています。 色んなサイトを見ながら途中までは何とかできましたが、どうしてもリンク先を表示できません。 お分かりになる方いましたら、お力添えいただければ幸いです。 状況: Excel2007使用  IE7  VB初心者です。 やりたい内容: VBでIEを立ち上げる ↓ ページからリンクをクリックする (ページ上に画像が貼り付けてあって、そこにURLくっついててハイパーリンクになっている。) (セキュリティの関係でハイパーリンク先を初期で表示することはできない。) ↓ 表示されたページに検索したい項目を入力 ↓ 結果をエクセルに反映する。 以上の作業をVBで組もうと思ってます。 よろしくお願いします。 Option Explicit Sub IE_Test() 'IEの起動 Dim objIE As Object Set objIE = CreateObject("InternetExplorer.Application") objIE.Visible = True '処理したいページを表示します。 objIE.Navigate "(表示したいページ)" 'ページの表示待ち   While objIE.readyState <> READYSTATE_COMPLETE Or objIE.Busy = True DoEvents Wend '開かれたIEを探す。 Dim objSHELL As Object Dim objWINDOW As Object Dim newIE As InternetExplorer '調べる項目に対して、、、 For yCNT = 3 To 102 ' If Trim(Cells(yCNT, 1)) = "" Then Exit For 'A列が空白になったらループを抜ける ここがわからない。。。 (画像になっているハイパーリンクをクリックしたい、、、) 'シェルのオブジェクトを作成する Set objSHELL = CreateObject("Shell.Application") Set newIE = objSHELL.Windows(objSHELL.Windows.Count - 1) Set objSHELL = Nothing '念のため、新しいウインドウの表示を待つ While newIE.readyState <> READYSTATE_COMPLETE Or newIE.Busy = True DoEvents Wend 'ページが表示されたので、表示された文章に対して、処理を行います。 newIE.document.all("phone_no").Value = Cells(yCNT, 1) 'A列の文字を参照する newIE.document.all("exec").Click '表示されたウインドウ(newIE)からデータをセットする Cells(yCNT, 2) = newIE.document.body.innerText '検索の結果をエクセルに反映 '新しいIE(子IE)を閉じる newIE.Quit Set newIE = Nothing '前のIE(親IE)を閉じる   objIE.Quit set objIE = Nothing Next yCNT End Sub 上記が現在までのできているコードです。 ここにも色々間違いがある可能性もあります。 ご指摘頂けましたら幸いです。 よろしくお願いします。

専門家に質問してみよう