Excel VBAでIEを操作(値の入力)について

このQ&Aのポイント
  • Excel VBAを使って、Internet Explorerのテキストボックスに値を入力する方法を教えてください。
  • Excel VBAでIEのテキストボックスに値を入力し、submitボタンを押す方法がわかりません。エラーが発生します。
  • HTMLソースにあるテキストボックスに値を入力し、submitボタンを押すVBAコードを作成したいです。しかし、エラーが発生します。
回答を見る
  • ベストアンサー

Excel VBAでIEを操作(値の入力)について

いくつかのところで、質問させていただきましたが、やはりダメなので、 もう一度改めて質問させていただきます。 「abc」と「counter」のテキストボックスに、文字を入力して、 submitボタンを押したいのですが、 何をやっても(下記のコード)、全てエラーになってしまいます。 何がダメなのかすらわかりません。 どなたかわかる方、ご教示お願い致します。 HTMLソースです。 <html> <head> <META HTTP-EQUIV="Content-Type" CONTENT="text/html;charset=ISO-8859-1"> <link rel="stylesheet" HREF="SSM.css" TYPE="text/css"> <title></title> <script src="/JSSM_CLIENT.js"></script> <script>document.charset="ISO-8859-1";</script> <SCRIPT> function fnOteBlanc() { sVin = document.FormIdentification.abc.value; sVinTemp = ''; for(i = 0; i < sVin.length; i++) { // alek le 20.03.2001 - ajout oter les : code ASCII > 129 (debut) if ((sVin.charAt(i) != ' ')&&(sVin.charCodeAt(i) < '129')) sVinTemp = sVinTemp + sVin.charAt(i); // if(sVin.charAt(i) != ' ') sVinTemp = sVinTemp + sVin.charAt(i); // alek le 20.03.2001 - ajout oter les (end) } document.FormIdentification.abc.value = sVinTemp; } // JML 01.10.2001 DEB function rechercheAuto() { if (document.FormIdentification.RECH_AUTO.value == "yes") { document.FormIdentification.Bouton_Rechercher.click(); } } // JML 01.10.2001 FIN </SCRIPT> </head> <body class="FondEcran" onLoad="ApresLoad11();afficher_menu(1);MajAide('AICM21.htm');rechercheAuto();"> <form NAME="FormIdentification" method="POST" action="/abc/jsp/eeServlet" target="_parent"> <table border="0" cellpadding="0" cellspacing="1" width="100%"> <tr> <td width="100%" class="TitrePage" colspan="5">code check</td> </tr> <tr> <td class="number">1</td> <td class="DataT">abc</td> <td class="DataT"><input TYPE="text" SIZE="20" NAME="abc" maxlength="20" ONCHANGE="fnOteBlanc()" value=""></td> <td class="number">2</td> <td class="DataT">counter &nbsp;<input TYPE="text" SIZE="5" NAME="def" maxlength="6" value="">&nbsp; </tr> <td class="DataT"> <input type="submit" value="Submit" name="Bouton_Rech" onClick="return(b_Continuer11());"> </td> <tr> </table> </form> </body> </html> 続いて、マクロのコードです(URLは、開いている状態から始める設定です。bodyというフレーム内での操作です)。 Sub rtrt() Dim objFRAME As FramesCollection Dim objDOC As HTMLDocument Dim ObjIE As Object Set objShell = CreateObject("Shell.Application") ' Range("a2").Select For Each objWindow In objShell.Windows If TypeName(objWindow.Document) = "HTMLDocument" Then If objWindow.Document.url = "URL" Then Set ObjIE = objWindow Exit For End If End If Next Set objFRAME = ObjIE.Document.frames Debug.Print "フレームの数は" & objFRAME.Length 'フレームの数は3つ Set objDOC = objFRAME("Body").Document ObjIE.Document.getElementsByName("abc")(0).Value = "abcde" '実行時エラー91:オブジェクト変数またはWithブロック変数が設定されていません。 objDOC.Document.getElementsByName("abc")(0).Value = "abcde" 'オブジェクトは、このプロパティまたはメソッドをサポートしていません。 objDOC.all("abc").innerHTML = "あいうえお" ''実行時エラー91:オブジェクト変数またはWithブロック変数が設定されていません。 'objDOC.all("abc").SetAttribute("Value", "あいうえお") 'そもそも構文エラー objDOC.VIN.Value = "VBA からの書き込み" '実行時エラー438:オブジェクトは、このプロパティまたはメソッドをサポートしていません。 objDOC.Document("abc").Value = "Ken3" '実行時エラー438:オブジェクトは、このプロパティまたはメソッドをサポートしていません。 Set txtOutput = ObjIE.Document.getElementByName("abc") '実行時エラー438:オブジェクトは、このプロパティまたはメソッドをサポートしていません。 txtOutput.Value = "VBA からの書き込み" objDOC.Document.all("Bouton_Rech").Click '実行時エラー438:オブジェクトは、このプロパティまたはメソッドをサポートしていません。 End Sub

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

  • ベストアンサー
  • kumatti1
  • ベストアンサー率60% (73/121)
回答No.1

>「abc」と「counter」のテキストボックスに、文字を入力して、 submitボタンを押したいのですが、 http://www5f.biglobe.ne.jp/~f-lap/tips_wait_documentcomplete.html (起動済みIEが対象なので)IEのRefreshメソッドでDocumentCompleteイベントを発火させて、 DocumentComplete イベントプロシージャの方で設定されるとか。

shoe-gal
質問者

お礼

kumatti1 様 返信ありがとうございます。 もう少し勉強してみます。 ありがとうございました。

shoe-gal
質問者

補足

kumatti様 返信ありがとうございます。 document completeについてURLを拝見いたしましたが、フォーム内にどのように値を入力すれば良いかわかりません。引き続きご教示お願い致しますm(_ _)m

関連するQ&A

  • 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で、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操作 電気家計簿ログインできない

    いつもお世話になっております。 何度も質問して申し訳ございません。またまた教えてください。 電気家計簿(https://www.kakeibo.tepco.co.jp/dk/aut/login/)のログインボタンをVBAで押したいのですが うまくできません。 コードは下記の通りです。 ***************************************************************** Sub test() Dim objIE As InternetExplorer Dim myObj As Object Set objIE = CreateObject("InternetExplorer.Application") objIE.Visible = True objIE.Navigate "https://www.kakeibo.tepco.co.jp/dk/aut/login/" Do While objIE.Busy = True Or objIE.ReadyState <> 4 DoEvents Loop objIE.Document.all("id").Value = "test" objIE.Document.all("password").Value = "tset" 'objIE.Document.Forms(0).submit 'これだと更新されちゃうっぽい 'objIE.Document.Forms(0).Item(2).Click 'Item(0)とItem(1)はエラーにならないけど何も起こらない。Item(2)にするとエラー 'objIE.Document.all.submit.Click 'エラー 'エラーにならないけど何も起こらない 'For i = 0 To objIE.Document.Links.Length - 1 ' If objIE.Document.Links(i).innerHTML Like "*alt=ログイン*" Then ' objIE.Document.Links(i).Click ' Exit For ' End If 'Next i 'エラーにならないけど何も起こらない '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 ***************************************************************** 自分なりにいくつか試してみたのですが、うまくいきませんでした。 ご教授よろしくお願いします。

  • VBAからIE操作でログインできない

    社内の業務管理システムにエクセルVBAでログインしようとしています、が、ログインはもとより、IDを入力する部分に私のID情報すら入力されません。 とりあえずID枠に入力する方法をアドバイスをお願いします。 ◆htmlソース <table> <tr> <td>ID</td> <td><input type="text" name="UserId" id="UserId" /></td> </tr> <tr> <td>PW</td> <td><input type="password" name="UserPass" id="UserPass" /></td> </tr> ◆VBAでは以下のいずれの文も失敗(ID入力枠に何も入らない。エラー発生。) ※右辺のD12セルには私のID情報を入力しています。 ObjIE.Document.all.UserId.Value = Worksheets("MyData").Range("D12").Value ObjIE.Document.all("UserId")(0).Value = Worksheets("MyData").Range("D12").Value ObjIE.Document.all("UserId").Value = Worksheets("MyData").Range("D12").Value ObjIE.document.forms(0).elements("UserId").Value = Worksheets("MyData").Range("D12").Value ObjIE.document.forms(0).elements("UserId")(0).Value = Worksheets("MyData").Range("D12").Value ObjIE.Document.getElementById("UserId").Value = Worksheets("MyData").Range("D12").Value ObjIE.document.all.Item("UserId").Value = Worksheets("MyData").Range("D12").Value 上記コードの何が間違っているのでしょうか? あるいは、上記の原因特定するために、何を試せばよいでしょうか? 宜しくお願いいたします。

  • vba ie操作 ボタンを押したい(2)

    https://ca.omc-card.co.jp/member/omcplus_login.html のサイトにログインしたいのですが、ログインボタンが押せません。 ソースは、 ********************************************************************************** <FORM action="../member/xt_mem_top_login.asp" method="post" name="form1"><input type="hidden" name="sid" value=""><input type="hidden" name="pw" value="">     ~~~省略~~~ <TABLE border="0" cellspacing="0" cellpadding="5" class="tab_button_bottom15"> <TR> <TD><A href="javascript:checkInput(document.form1);"><IMG src="../img/button/login.gif" alt="ログイン" width="160" height="35" border="0"></A></TD> </TR> </TABLE> </FORM> ********************************************************************************** です。 --------------------------------------------------------------------------------- Sub test() Dim objIE As InternetExplorer Set objIE = CreateObject("InternetExplorer.Application") objIE.Visible = True objIE.Navigate "https://ca.omc-card.co.jp/member/omcplus_login.html" Do While objIE.Busy = True Or objIE.ReadyState <> 4 DoEvents Loop objIE.Document.forms(0).Item("sid_input").Value = "×××" objIE.Document.forms(0).Item("pw_input").Value = "×××" Do While objIE.Busy = True Or objIE.ReadyState <> 4 DoEvents Loop 'objIE.Document.forms(1).submit 'エラーになる objIE.Document.all.Item("document.form1").Click 'エラーになる objIE.Document.forms(0).getElementsByTagName("input")(0).Click 'エラーにならないけどクリックもされない。 objIE.Document.forms(0).getElementsByTagName("input")(1).Click 'エラーにならないけどクリックもされない。 objIE.Document.forms(0).getElementsByTagName("document.form1")(1).Click 'エラーになる objIE.Document.forms(1).getElementsByTagName("input")(1).Click 'エラーになる Set objIE = Nothing End Sub --------------------------------------------------------------------------------- テキストにIDとPWを入れるところまでは出来たのですが、 ログインボタンを押すことができません。 すいませんがご教授ご回答よろしくお願いしますm( )m

  • 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

  • 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回しかないようです。 うーん、うまくできません。 ご教授よろしくお願いします。

  • vba ie操作 ログインしたい

    いつもお世話になっております。 前回ご回答いただいた方ありがとうございました。 またまた困ったことにログインしたいサイトがあるのですがうまくできません。 URLはhttps://www.a-q-f.com/openpc/USB0100S01Action.do?aqf_id=S0000&send_url=https://www.a-q-f.com/&get_userInfo=&r=2941249539317530063 なのですが、ログインが二つあり、左側でログインしたいのですが、ボタンを押下できません。 **************************************************** Sub 永久不滅ドットコム() Dim objIE As InternetExplorer Set objIE = CreateObject("InternetExplorer.application") objIE.Visible = True objIE.Navigate "https://www.a-q-f.com/openpc/USB0100S01Action.do?aqf_id=S0000&send_url=https://www.a-q-f.com/&get_userInfo=&r=2941249539317530063" Do While objIE.Busy = True Or objIE.ReadyState <> 4 DoEvents Loop objIE.Document.all.ID.Value = "test" objIE.Document.all.idPassword.Value = "test" Do While objIE.Busy = True Or objIE.ReadyState <> 4 DoEvents Loop For i = 0 To objIE.Document.Links.Length - 1 If objIE.Document.Links(i).innerHTML Like "*alt=ログイン*" Then '何も起こらない objIE.Document.Links(i).Click Exit For End If Next i objIE.Document.Forms(0).Click '何も起こらない objIE.Document.Forms(0).Submit 'エラーになる Set objIE = Nothing End Sub **************************************************** をやってみましたが無理でした・・・ ご教授よろしくお願いします。

  • VBAからIEの操作

    グーグルをIEで開いてVBA(語句)を検索して見終わったら IEを閉じる作業をしたいのですが、検索窓にVBA(語句)を 入力するところでエラーとなります。初心者ですが、なんとか 勉強したいのでよろしくお願いいたします。 Sub ie_test_Navigate() Dim objIE As Object Set objIE = CreateObject("InternetExplorer.application") objIE.Visible = True objIE.Navigate "http://www.google.co.jp/" IE.document.all.q.Value = "VBA" IE.document.all.btnG.Click If MsgBox("IEを閉じますか?", vbYesNo, "終了確認") = vbYes Then objIE.Quit End If Set objIE = Nothing End Sub

  • 起動しているIEをVBSで閉じるときの問題・・・

    VBスクリプトで起動しているIEを探し特定のサイトであればウィンドウを閉じたいのですがどのようにすればよいのでしょうか? Dim ObjIE Dim ObjShell Dim ObjWindow Dim WinExist 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 If objIE.Document.URL = "http://www.yahoo.co.jp/" Then objIE.quit End If If objIE.Document.URL = "http://www.excite.co.jp/" Then objIE.quit End If If objIE.Document.URL = "http://www.google.co.jp/" Then ?????????? End If ・ ・ ・ 例えばディスプレイ上にYahoo、Excite、Googleのホームページがそれぞれ立ち上がっていたとします。 もしYahooがあれば閉じて次にExciteを探しあれば閉じて、次にGoogleのページがあればそのままにし後の処理を行わず終わらせたいのですが・・・もしGoogleが開いていればこれ以降の処理を全てすっ飛ばして終了にしたいのですが・・・ また、If thenを繰り返してばかりで汚いコードのような気もします。 これをやっていてYahoo、Excite、Google全て開いていた場合何故かエラーが出て終了してしまいます。 どなたかいい方法があれば教えて下さい。

専門家に質問してみよう