エクセルVBAでWeb上のフォームのIDを知る方法

このQ&Aのポイント
  • エクセルVBAでWeb上のフォームのIDを調べる方法について教えてください。
  • Web上のテキストボックスやボタンのIDを取得するためのコードについて教えてください。
  • 特定のフォームのIDを事前に調べる方法について教えてください。
回答を見る
  • ベストアンサー

エクセルVBA Web上のフォームのIDを知る方法

 今晩は,質問させていただきます.どうぞよろしくお願いいたします.  エクセルVBAでWeb上のテキストボックスに文字を入力→ボタンを押す といった作業をいたしたく検索をしておりますと、以下のようなコードを書いてくださってておりました。 (http://billboardtop100.net/2011/03/dim-objie-as-object-dim-obj-as-object.htmlからの転載になります)   If Obj.ID = "searchText" Then     Obj.Value = "任天堂"   Else     If Obj.ID = "searchButton" Then       Obj.Click       Exit For     End If   End If  全てうまくうごき、非常に理解しやすいコードなのでございますが、これらフォームの「ID」を予めどのようにして調べらるのでございましょうか??  もしお詳しい方がいらっしゃいましたら,アドバイスいただきたくどうぞお願いいたします。

  • MKT_
  • お礼率99% (329/330)

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

  • ベストアンサー
noname#146604
noname#146604
回答No.1

そのページのソースから見ることが出来ます。 ヤフーファイナンスの検索ボックスのソースを見てみると↓のようになっているので、検索ボックスのソースはsearchTextだと分かります。 <INPUT style="COLOR: #999999" id=searchText value=コードまたは企業名を入力 name=s> また、”株価検索”のボタンのソースも同様に↓になっているので、ボタンの名称はsearchbuttonだと分かります。 <INPUT id=searchButton value=&nbsp;株価検索&nbsp; type=submit>

MKT_
質問者

お礼

syoyaku072様 どうもありがとうございます!!m(_ _)m 他のページでもソースを保存してみまして、 .ID = ~ .Name = ~ などと試しに記述してみるとうまく動いてくれました。非常に楽しいです^^ この度はご親切にお教えいただきまして誠にありがとうございました!m(_ _)m

関連するQ&A

  • エクセルVBAのFINDの質問です。

    エクセルVBAのFINDの質問です。 シート1    A    B    C     D 1 コード1 コード2 コード3 名 称 2  4    1     1 3  4    2     2 4  4    3     1 シート2    A    B 1 コード1 名 称 2  1   名称1 3  2   名称2 やりたいことは、シート1のD列に、シート1のコード3をもとにシート2から名称を取得したいのです。 下記に記したプログラムだと最初のFINDNEXTは動くのですが、 2回目でエラーになってしまい、次を読んでくれません。 どなたか、ご教授頂けますでしょうか。 シート1の検索条件はコード1の"4"です。 シート1のコード1は重複キーで、一レコードずつ読んで行き、各レコード毎にシート2を読みたい のです。 Dim シート1 As Worksheet Dim シート2 As Worksheet Dim obj As Object Dim Lin As Integer Dim mykey As Integer Dim obj1 As Object Dim Lin1 As Integer Dim mykey1 As Integer Dim st_Lin As Integer Set シート1 = ThisWorkbook.Worksheets("シート1") Lin = シート1.Cells(シート1.Rows.Count, 1).End(xlUp).Row mykey = "4" Set obj = シート1.Range("A1", "A" & Lin).Cells.Find(What:=mykey, _ LookIn:=xlValues, _ lookat:=xlWhole, _ SearchOrder:=xlByColumns) If obj Is Nothing Then   MsgBox ("異常です")   Exit Sub Else   st_Lin = obj.Row   Do Until obj.Row <> st_Lin    Set obj = シート1.Range("A1", "A" & Lin).FindNext(obj)    If obj Is Nothing Then     Exit Do    Else     Set シート2 = ThisWorkbook.Worksheets("シート2")       With シート2          Lin1 = .Cells(シート2.Rows.Count, 1).End(xlUp).Row          mykey1 = シート1.Cells(obj.Row, 3).Value          Set obj1 = .Range("A1", "A" & Lin1).Cells.Find          (What:=mykey1,LookIn:=xlValues,lookat:=xlWhole,SearchOrder:=xlByColumns)          If obj1 Is Nothing Then           MsgBox ("名称取得できませんでした")           Exit Sub          Else            シート1.Cells(obj.Row, 4).Value = .Cells(obj1.Row, 2).Value          End If       End With    End If   Loop End If

  • エクセルVBAで、IEからコピーするには

    エクセル2000,win2000,IE6です。 次のような、コードを書きました。 Sub t03ccc() Dim objIE As Object 'IE オブジェクト参照用 Dim objShell As Object 'Shell オブジェクト参照用 Dim objWindow As Object 'Window オブジェクト参照用 Set objShell = CreateObject("Shell.Application") For Each objWindow In objShell.Windows '起動中のタイトルを探して。 If Left(objWindow.document.Title, 7) = "Office系" Then Set objIE = objWindow 'オブジェクトを代入 Msg = "Office系" Exit For End If Next If Msg <> "Office系" Then MsgBox "・・・スクリーニング結果一覧・・・がありません" Exit Sub End If objIE.ExecWB 17, 0 'OLECMDID_SELECTALL = 17 全てを選択 objIE.ExecWB 12, 0 'OLECMDID_COPY = 12 コピー Sheets("Sheet3").Select Rows("1:200").ClearContents Range("A1").Select ActiveSheet.Paste '''' objIE.Quit Set objIE = Nothing Set objShell = Nothing Set objWindow = Nothing End Sub これで、エクセルとIEしか開いてないときは巧くいくのですが、 エクスプローラーを同時に開くと実行時エラー438が出ます。 よろしくお願いします。

  • [VBA] IEによる自動ログインについて

    こちらの識者の方々にはいつもお世話になっています。 VBAの質問です。 環境は下記になります。 OS=windows7 pro 64bit Office=Excel2007(12.0.6712.5000) SP3 IE=11.0.9600.17501(IE11) ・やりたいこと VBAを使用してnanacoのサイトに自動ログオンする ・試したコード Option Explicit Sub test() Dim objIE As Object Dim obj As Object Set objIE = CreateObject("InternetExplorer.Application") objIE.Visible = True objIE.Navigate "https://www.nanaco-net.jp/pc/emServlet" Do While objIE.Busy = True Or objIE.readyState <> 4 DoEvents Loop 'ID、pass入力 For Each obj In objIE.document.getElementsByTagName("input") If obj.ID = "XCID" Then obj.Value = "1234567890123456" 'nanaco番号 End If If obj.ID = "SECURITY_CD" Then obj.Value = "1234567" 'カード記載の番号 End If Next 'ログインボタンをクリックする For Each obj In objIE.document.getElementsByTagName("button") If obj.ID = "Login" Then obj.Click End If Next Set objIE = Nothing End Sub ・問題点 ログイン画面の「カード記載の番号でログインする」の項目の「nanaco番号」「カード記載の番号」にそれぞれ「1234567890123456」「1234567」を入力したいのですが、自分で調べて上記コードを試したところ、IEは立ち上がるものの、該当の箇所に文字列が入力されません。 コードの「ログインボタンをクリックする」部分についても動作していないと思います。 VBAでIEを制御すること自体慣れていないのですが、上記コードの問題点とできればコードをご教授いただけますでしょうか。 質問に不備不足等ございましたらご指摘ください。 ご面倒お掛けしますがよろしくお願いします。

  • VBA 実行時エラー1004 rangeメソッドは

    始めまして、VBA初心者です。 現在VBAプログラムを使って、サイトに自動ログイン出来るようにコードを作成しているのですが、『実行時エラー’1004’rangeメソッドは失敗しました。’_global’オブジェクト』とメッセージが出て、実行できません。 デバックをすると以下の11行目で黄色のバーが出ていました。いろいろと調べてみましたが、原因がわからずに止まってしまいました。 どなかた分かる方がいらっしゃいましたら教えて頂けますようにお願い致します。 コードは下記です。 Sub 無料スペースログイン() Set ObjIE = CreateObject("InternetExplorer.Application") ObjIE.Visible = True ObjIE.Navigate "http://mnnf.jp/signup/" Do While ObjIE.ReadyState <> 4 Do While ObjIE.Busy = True Loop Loop For Each Obj In ObjIE.Document.getElementsByTagName("input") If Obj.Name = "mail" Then ObjIE.Document.getElementsByName("mail")(0).Value = Range("A1").Value Else If Obj.Name = "password" Then ObjIE.Document.getElementsByName("password")(0).Value = Range("B1").Value Else Exit For If Obj.alt = "新規無料登録" Then Obj.Click Exit For End If End If End If Next End Sub

  • VBAでWebに値を入力

    VBAでWebに値を入力する操作を考えています。 エクセルシートのA1に入っている値をWeb上に入力する操作なのですが、 以下のコードを実行すると「AllLog.keyword.Value = t」の部分でエラーになります。 googleではkeywordのところを「q」、yahooではkeywordのところを「p」にすれば問題ないのですが、 神奈川中央交通のページではエラーになってしまいます。 なぜですか?? Sub google() Dim objIE As InternetExplorer '参照設定:Microsoft Shell Controls and Automation Dim objShell As Shell Dim WinFlg As Boolean Dim objWin As Object Dim AllLog As Object On Error GoTo EndProcess Set objShell = New Shell For Each objWin In objShell.Windows If TypeName(objWin) = "IWebBrowser2" Then WinFlg = True Set objIE = objWin Exit For End If Next Set objShell = Nothing If WinFlg = False Then MsgBox "IEオブジェクトが取得できません", vbCritical Exit Sub End If EndProcess: If Err() > 0 Then MsgBox Err.Description End If With objIE Set AllLog = .Document.all t = Cells(1, 1) AllLog.keyword.Value = t End With Set objIE = Nothing End Sub

  • Web画面をプリントする方法(エクセルVBA)

    エクセル2000です。 VBAでNavigateを使いWeb画面(イントラネット)を開き、 .Document.all.Item("Hoge****No").Value = Target.Text のような方法で入力を行い、 .Document.forms(0).submit で送信ボタンクリックして新たな画面を開くところまではできております。 次に、その開いた画面をプリントしたいのです。 どのようなコードになるのでしょうか? ご教示いただければ幸いです。 (o。_。)oペコッ 現在のコードは以下のとおりです。 Dim objIE As Object Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Target.Count > 1 Then Exit Sub '複数セル不可 If Target.Column <> 1 Then Exit Sub 'A列のみ対象 'IEが起動しているかチェック。objIE.Nameプロパティの取得に成功したら起動とみなす。 Dim tmp As String On Error Resume Next tmp = objIE.Name If Err.Number <> 0 Then 'エラーならIEが起動していないので、起動する Set objIE = CreateObject("InternetExplorer.Application") End If On Error GoTo 0 With objIE .Navigate "​http://******.co.jp/******/**/***/Details/DetailsScr/init"​ .Visible = True Do While .Busy = True DoEvents Loop .Document.all.Item("Hoge****No").Value = Target.Text 'テストボックスへ入力:Name属性で指定 'オートコンプリートなどの機能が働く場合があるので、念のため待機 Do While .Busy = True DoEvents Loop .Document.forms(0).submit '送信ボタンクリック End With End Sub

  • VBAでURLを指定する方法

    VBAを使用して、エクセルに記載しているテキストで開くURLを変えるプログラムを作成しようと思っております。 例えばA1に『yahoo』と入力されていれば、『http://www.yahoo.co.jp/』を開き、 『google』と入力されていれば、『http://www.google.com』を開くようにしたいです。 現在、下記のプログラムを使用していますので、 下記を流用できるようにして頂けると幸いです。 Sub test() Set objIE = CreateObject("InternetExplorer.Application") objIE.Visible = True objIE.Navigate "『特定URL』" Do While objIE.ReadyState <> 4 Do While objIE.Busy = True Loop Loop For Each Obj In objIE.Document.getelementsbytagname("input") If Obj.Name = "mail" Then objIE.Document.getelementsbyname("mail")(0).Value = Range("C1").Value Else If Obj.Name = "password" Then objIE.Document.getelementsbyname("password")(0).Value = Range("D1").Value Else objIE.Document.Links(1).Click End If End If Next End Sub 宜しくお願いいたします。

  • VBA IE制御 TABLE取得できません

    以下のコードを使用し、WEBページから「レース検索結果」のテーブルを取得しようとしました。 エラーは出ないのですがコード下から5行目で「OK」のメッセージボックスが 表示されるはずなのですが表示されませんでした。 ローカルウィンドウで確認したところ、summary「レース検索結果」が取得できていませんでした。 WEBページのソースには「レース検索結果」というsummaryは存在しているんですが・・・ どなたかご教授ねがいます OS:Windows 7 Excel:2007 InternetExplorer:11 Sub test() Const strURL As String = "http://db.netkeiba.com/?pid=race_search_detail" Dim objIE As New InternetExplorer Dim objDoc As HTMLDocument Dim objAllInput As Object Dim objInput As HTMLInputButtonElement Dim objAllTable As Object Dim objTable As HTMLTable With objIE .navigate strURL .Visible = True End With Do While objIE.Busy = True Or objIE.readyState <> 4 DoEvents Loop Set objDoc = objIE.document Set objAllInput = objDoc.getElementsByTagName("input") For Each objInput In objAllInput If objInput.ID = "check_Jyo_09" Then objInput.Checked = True Exit For End If Next Do While objIE.Busy = True Or objIE.readyState <> 4 DoEvents Loop For Each objInput In objAllInput If objInput.Value = "検索" Then objInput.Click Exit For End If Next Do While objIE.Busy = True Or objIE.readyState <> 4 DoEvents Loop Application.Wait (Now + TimeValue("00:00:10")) Set objDoc = objIE.document Set objAllTable = objDoc.getElementsByTagName("table") For Each objTable In objAllTable If objTable.Summary = "レース検索結果" Then MsgBox "OK" Exit For End If Next End Sub

  • VBAで、デバッグをお願いします。

    作りたいプログラムはpartsno_01から、partsno_20までのテキストボックスに、エクセルのセルA1から、A20までにある製品番号を入力し、データをsubmitするものです。 Sub pn() Dim ObjIE As Object Dim ObjShell As Object Dim ObjWindow As Object Dim WinExist As Boolean WinExist = False Set ObjShell = CreateObject("Shell.Application") For Each ObjWindow In ObjShell.Windows If TypeName(ObjWindow.document) = "HTMLDocument" Then WinExist = True Set ObjIE = ObjWindow End If Next Set ObjShell = Nothing If Not WinExist = True Then MsgBox "製品番号検索を開いてください。" Exit Sub End If ObjIE.Visible = True Do While i < 21 i = 1 Set elements = ObjIE.document.getElementsByName("partsno_0" & "i") If elements Is Nothing Then Exit Sub End If elements.Item(0).Value = Worksheets(1).Cells(i, 1).Value i = i + 1 Loop End Sub で、 elements.Item(0).Value = Worksheets(1).Cells(1, 1).Value が常にエラーになります。 間違っていはいないと思うんですが・・・・。 何がいけないのでしょうか。

  • vbaでnanacoにログイン(ie操作)

    私は「緑のパスワードがなくnanacoをお持ちの方」です。 カード記載の番号にはvbaで値を入れることはできるのですが、 nanaco番号に値を入れることとログインボタンを押すことができません。 ********************************************** Sub nanaco() Dim objIE As InternetExplorer Dim myObj As Object Set objIE = CreateObject("InternetExplorer.Application") objIE.Visible = True objIE.navigate "https://www.nanaco-net.jp/pc/emServlet" Do While objIE.Busy = True DoEvents Loop Do While objIE.document.readyState <> "complete" DoEvents Loop objIE.document.all("XCID").Value = "12345" objIE.document.all("SECURITY_CD").Value = "Password" For Each myObj In objIE.document.forms(0).all If TypeName(myObj) = "HTMLInputElement" Then If myObj.alt = "ログイン" Then myObj.Click Exit For End If End If Next Set objIE = Nothing End Sub ********************************************** これだとまずall("XCID").Value でエラーになります。 ソースでは、 <input name="XCID" tabIndex="1" class="txtBoxLogin" accessKey="1" type="text" maxLength="16" value=""/> となっておりますが、同じコードが二つあるからエラーになるのでしょうか? all("SECURITY_CD").Value は問題なくできます。 ソースにも、SECURITY_CDは一つしかないです。 次にログインボタンも二つあるのですが、 For Each myObj In objIE.document.forms(0).all If TypeName(myObj) = "HTMLInputElement" Then If myObj.alt = "ログイン" Then myObj.Click Exit For End If End If Next このコードを実行すると、多分上の方のログインボタンが押されてるようです。 なので、 Dim 二つ目 As Boolean For Each myObj In objIE.document.forms(0).all If TypeName(myObj) = "HTMLInputElement" Then If myObj.alt = "ログイン" Then If 二つ目 = True Then myObj.Click Exit For End If 二つ目 = True End If End If Next に変更してみたのですが、 どうやら If myObj.alt = "ログイン" Then になるのは、1回しかないようです。 うーん、うまくできません。 ご教授よろしくお願いします。

専門家に質問してみよう