VBAでWebに値を入力する方法とは?

このQ&Aのポイント
  • VBAを使用してエクセルシートのA1に入力された値をWeb上に入力する方法を解説します。
  • コード内で「AllLog.keyword.Value = t」という行がエラーになることがあります。googleでは「keyword」の部分を「q」に、yahooでは「p」にすれば問題ないのですが、神奈川中央交通のページではエラーになります。
  • このエラーが発生する原因は、Webページの入力フィールドの名前が異なるためです。各Webページで要素の名前を確認し、適切な名前を使用して値を入力する必要があります。
回答を見る
  • ベストアンサー

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

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

  • ベストアンサー
  • o_chi_chi
  • ベストアンサー率45% (131/287)
回答No.1

フォーム内に"keyword"が2つあるからではないかと思います。 フレームを指定すればうまくいくと思います。 -- objIE.Document.forms(0)("keyword").Value = t または objIE.Document.fmTime("keyword").Value = t

add0804
質問者

補足

ありがとうございます。できました! 今度は「yahoo Japan ID登録」画面 (https://edit.yahoo.co.jp/config/eval_register?.src=www&.intl=jp&.done=http://www.yahoo.co.jp) でエクセルのA1に入力されている値をYahoo! JAPAN ID の欄に入力できるか試してみました。 「AllLog.keyword.Value = t」の「keyword」を変えただけではうまくいかないのですが、この場合どうすればいいのですか? 宜しくお願いします。

その他の回答 (2)

  • o_chi_chi
  • ベストアンサー率45% (131/287)
回答No.3

そんなに詳しくないので、下記を参考にがんばってください。

参考URL:
http://msdn.microsoft.com/en-us/library/aa155073.aspx
  • o_chi_chi
  • ベストアンサー率45% (131/287)
回答No.2

下記のようにするとできました --- Sub IE_Test() Dim objIE As Object 'オブジェクト生成 Set objIE = CreateObject("InternetExplorer.application") objIE.Visible = True objIE.Navigate "https://edit.yahoo.co.jp/config/eval_register?.src=www&.intl=jp&.done=http://www.yahoo.co.jp" 'ページが表示されるのを待つ While objIE.ReadyState <> 4 'READYSTATE_COMPLETE While objIE.Busy = True DoEvents Wend Wend '設定 objIE.Document.Forms(0)("login").Value = "test" 'objIE.Document.Forms(0).Item("yid-ft").Value = "test" Set objIE = Nothing End Sub

add0804
質問者

補足

本当に助かります。 これまで教えてもらったことを総動員して、更にいろいろなサイトを見てやっても、次のソースのサイトではうまくいかないのですが… 「ALT_L_NAME」の部分に「あいうえお」と入力したいのですが、 「objIE.Document.Forms(0)("login").Value = "test"」の部分をどう変更すればいいのですか? (以下ソースの抜粋) <table width="550" border="0" cellspacing="0" cellpadding="0" align="left"> <tr><td height="30"> <center> <br> <img src="../../images/user_regist.gif" border="0" width="463" height="48"> <br><b>。罕ェ・鬣、・ミマソ。・/b> <table width="540" border="1" cellspacing="0" cellpadding="3"> <tr> <td bgcolor="#FFFF93" width="150"> <font color="#660000"> <b>・譯シ・カ・ソ・、・ラ</b></font> </td> <td width="390"> <SELECT NAME="PRIVILEGE_CODE" onChange=click01()><OPTION VALUE=2>タクナフ </SELECT> </td> </tr> <tr> <td bgcolor="#FFFF93" width="150"> <font color="#660000"> <b>タォ・ユ・・ャ・ハ(チエウム・ォ・ハ)</b></font> </td> <td width="390"> <INPUT TYPE="text" NAME="L_NAME" SIZE="40" MAXLENGTH="16"> </td> </tr> <tr> <td bgcolor="#FFFF93" width="150"> <font color="#660000"> <b>フセ・ユ・・ャ・ハ(チエウム・ォ・ハ)</b></font> </td> <td width="390"> <INPUT TYPE="text" NAME="F_NAME" SIZE="40" MAXLENGTH="16"> </td> </tr> <tr> <td bgcolor="#FFFF93" width="150"> <font color="#660000"> <b>タォ(エチサ・</b></font> </td> <td width="390"> <INPUT TYPE="text" NAME="ALT_L_NAME" SIZE="40" MAXLENGTH="16"> </td> </tr> <tr> <td bgcolor="#FFFF93" width="150"> <font color="#660000"> <b>フセ(エチサ・</b></font> </td> <td width="390"> <INPUT TYPE="text" NAME="ALT_F_NAME" SIZE="40" MAXLENGTH="16"> </td> </tr> <tr> <td bgcolor="#FFFF93" width="150"> <font color="#660000"> <b>タクヌッキ・/b></font> </td> <td width="390"> <SELECT NAME="BIRTH_PERIOD"> <OPTION VALUE="S">セシマツ <OPTION VALUE="H" selected>ハソタョ </SELECT> <SELECT NAME="BIRTH_YEAR"> <SCRIPT Language=JavaScript> <!-- for (i=1; i<65; i++) document.write("<OPTION VALUE ="+i+">" + i); // --> </SCRIPT> </SELECT> ヌッ <SELECT NAME="BIRTH_MONTH" onChange=click02(this.form)> <SCRIPT Language=JavaScript> <!-- for (i=1; i<13; i++) document.write("<OPTION VALUE ="+i+">" + i); // --> </SCRIPT> </SELECT> キ・ <SELECT NAME="BIRTH_DAY"> <SCRIPT Language=JavaScript> <!-- for (i=1; i<32; i++) document.write("<OPTION VALUE ="+i+">" + i); // --> </SCRIPT> </SELECT> ニ・ </td> </tr> <tr> <td bgcolor="#FFFF93" width="150"> <font color="#660000"> <b>カオシシフセ</b></font> </td> <td width="390"> <SELECT NAME="USER_GROUP">  ・  ・  ・

関連するQ&A

  • エクセル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で、デバッグをお願いします。

    作りたいプログラムは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 が常にエラーになります。 間違っていはいないと思うんですが・・・・。 何がいけないのでしょうか。

  • VBのコードが理解できません 解説いただけないでしょうか?

    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 Set ObjIE = CreateObject("InternetExplorer.Application") End If ObjIE.Navigate "http://nantokakantoka.html" ObjIE.Visible = True このコードを解説いただけないでしょうか? 特に WinExist For Each ObjWindow In ObjShell.Windows If TypeName(ObjWindow.Document) = "HTMLDocument" Then が何をしているのか分からないんです。

  • VBAでIE操作をするサンプル

    VBAでIE操作をするサンプルをネットでいくつか見ているのですが Sub Sample1() Dim objShell As Object Dim objIE As New InternetExplorer Set objShell = CreateObject("Shell.Application") objIE.Visible = True objIE.Navigate "http://www.yahoo.co.jp/" Set objIE = Nothing Set objShell = Nothing End Sub Sub Sample2() Dim objIE As InternetExplorer Set objIE = CreateObject("InternetExplorer.application") objIE.Visible = True objIE.Navigate "http://www.yahoo.co.jp/" Set objIE = Nothing End Sub ではどちらを使った方がいいのでしょうか? 圧倒的にSample2の方がネットでは多いのですが Sample1のやり方もあることを知りました。 Sample1の方法でブラウザを開くメリットはあるのでしょうか?

  • objIE  2個目のサイズが適用されません。

    VBAです。 Dim objShell As Object Dim objIE As New InternetExplorer Const READYSTATE_COMPLETE As Long = 4 Sub test1() Set objShell = CreateObject("Shell.Application") objIE.Visible = True objIE.Top = 0 objIE.Left = 0 objIE.Width = 100 objIE.Height = 100 objIE.navigate "http://www.goo.ne.jp/" objIE.Navigate2 "http://www.goo.ne.jp/", 2048 Set objIE = Nothing Set objShell = Nothing Set objShell = CreateObject("Shell.Application") objIE.Visible = True objIE.navigate "http://www.goo.ne.jp/" objIE.Navigate2 "http://www.goo.ne.jp/", 2048 'できない objIE.Top = 20 objIE.Left = 20 objIE.Width = 100 objIE.Height = 100 Set objIE = Nothing Set objShell = Nothing End Sub のように二つのブラウザを立ち上げて サイズを変えたいのですが 2個目のサイズが適用されません。 エラーにもなりません。 なぜでしょうか?

  • VBAで起動しているIEの操作

    IEでOKWAVEを開いていたら イミディエイトウィンドウに タイトルを表示するのに 次の 記述をしましたが エラーになりました。 実行時エラー '-2147467259 (80004005)': 'Document' メソッドは失敗しました: 'IWebBrowser2' オブジェクト なぜでしょうか? IEは11です。 エクセルは2013 OSは windows7 ホームプレミアム vbsは次の通り Sub okwave() Dim colSh As Object Dim win As Object Dim strTemp As String Dim objIE As Object Set colSh = CreateObject("Shell.Application") For Each win In colSh.Windows If TypeName(win.document) = "HTMLDocument" Then If InStr(win.document.Title, "okwave") > 0 Then Set objIE = win Exit For End If End If Next Debug.Print objIE.document.Title End Sub

  • VBでのContinueが間違っているとき

    http://oshiete1.goo.ne.jp/qa4564345.htmlではありがとうございました。 教わったことを参考にやってみたのですがうまくいきません。 Continueの部分がうまくいくPCといかないPCがあるのでどうしたらいいか分からなくなってしまいました・・・ Option Explicit Dim objIE Dim objShell Dim objWindow Dim WinExist Dim strURL Dim strURL2 Dim Flug strURL = "http://www.yahoo.co.jp/" strURL2 = "http://www.google.co.jp/" WinExist = False Set objShell = CreateObject("Shell.Application") For Each objWindow In objShell.Windows If TypeName(objWindow.Document) <> "HTMLDocument" Then Continue End If WinExist = True Set objIE = objWindow If objIE.LocationURL = strURL Then Flug = True Exit For End If Next If Flug = True Then msgbox "ヤフー存在" Else msgbox "別の処理を行なう" If WinExist = False Then 'IEが無い場合 起動する Set objIE = WScript.CreateObject("InternetExplorer.Application") objIE.Navigate strURL2 objIE.Visible = True Set objIE = Nothing End If End If

  • VBAを始めたばかりです。

    VBAを始めたばかりです。 下記でエラー「オブジェクトが必要です」が出ます。 何故ですか。 Sub A_Sample048() Dim mySht1 As Object Dim mySht2 As Worksheet '準備ここまで Set mySht1 = ActiveSheet If mySht1.Type = xlWorksheet Then Set mySht2 = mySht1 MsgBox mySht2.Name Else MsgBox "最前面のシートはワークシートではありません" End If Set mySht1 = Nothing 'オブジェクトの解放 Set mySht2 = Nothing End Sub よろしくお願いします。

  • 【VBA】IEのリンクを新しいタブで開く

    VBAでIEを制御しリンク(アンカー)<a href="***">を新しいタブで開くようにしたいのですが可能でしょうか? 仮にグーグルのトップページ(http://www.google.co.jp/)の『検索オプション』(http://www.google.co.jp/advanced_search?hl=ja)を新しいタブで開くとします 実際に開きたいリンクのURLは固定ではないためURLの指定では開けませんが、飛びたいリンクの文言(『検索オプション』)は固定です リンクに飛ぶ前に飛ぶ先のURLを取得する仕方か、Shift+Ctrl+クリックのようにリンクを新しいタブで開く方法を教えてください 一度普通にリンクに飛んでからURLを取得し、戻ってから新しいタブで開くぐらいしかできないのでしょうか? Sub 新しいタブで開く() Dim objIE As Object Dim objShell Dim URL As String Set objShell = CreateObject("Shell.Application") For n = objShell.Windows.Count To 1 Step -1 Set objIE = objShell.Windows(n - 1) If Right(UCase(objIE.FullName), 12) = "IEXPLORE.EXE" Then objIE.Navigate "http://www.google.co.jp/" Exit For End If Next Set objShell = Nothing objIE.Visible = True Do While objIE.Busy = True Or objIE.ReadyState <> 4 DoEvents Loop For Each Obj In objIE.Document.getElementsByTagName("a") If Obj.innerText = "検索オプション" Then Obj.Click Do While objIE.Busy = True Or objIE.ReadyState <> 4 DoEvents Loop URL = objIE.Document.URL objIE.GoBack Do While objIE.Busy = True Or objIE.ReadyState <> 4 DoEvents Loop objIE.Navigate URL, CLng(&H800) Exit For End If Next End Sub よろしくお願いいたします

  • 「オブジェクトは、このプロパティまたはメソッドをサポートしていません。」と表示されるのですが…

    以下のコードを事項すると、「オブジェクトは、このプロパティまたはメソッドをサポートしていません。」と表示されて 「objIE.Document.all.ALT_L_NAME.Value = t」の部分が黄色くなります。 解決策をお願いいたします。 (以下、コードとソースの一部です) コード↓ Sub a() 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 t = Cells(1, 1) objIE.Document.all.ALT_L_NAME.Value = t Set objIE = Nothing End Sub ソース(一部)↓ ・ ・ ・ <SELECT NAME="PRIVILEGE_CODE" onChange=click01()><OPTION VALUE=2>タクナフ </SELECT> </td> </tr> <tr> <td bgcolor="#FFFF93" width="150"> <font color="#660000"> <b>タォ・ユ・・ャ・ハ(チエウム・ォ・ハ)</b></font> </td> <td width="390"> <INPUT TYPE="text" NAME="L_NAME" SIZE="40" MAXLENGTH="16"> </td> </tr> <tr> <td bgcolor="#FFFF93" width="150"> <font color="#660000"> <b>フセ・ユ・・ャ・ハ(チエウム・ォ・ハ)</b></font> </td> <td width="390"> <INPUT TYPE="text" NAME="F_NAME" SIZE="40" MAXLENGTH="16"> </td> </tr> <tr> <td bgcolor="#FFFF93" width="150"> <font color="#660000"> <b>タォ(エチサ・</b></font> </td> <td width="390"> <INPUT TYPE="text" NAME="ALT_L_NAME" SIZE="40" MAXLENGTH="16"> </td> </tr> <tr> <td bgcolor="#FFFF93" width="150"> <font color="#660000"> <b>フセ(エチサ・</b></font> </td> <td width="390"> <INPUT TYPE="text" NAME="ALT_F_NAME" SIZE="40" MAXLENGTH="16"> </td> </tr> ・ ・ ・

専門家に質問してみよう