- ベストアンサー
VBAからWEB操作について
- ExcelのVBAを使用して、JavaScriptで作成されたWEBページの操作を行いたい場合、テキストボックスの名前の確認や指定方法についての質問です。
- テキストボックスの名前が設定されていない場合、どのようにしてテキストボックスを指定するのかについてお知りになりたいです。
- VBAの角度からの質問ですが、ExcelのVBAから他社が作成したJavaScriptで作られたWEBページのテキストボックスへの操作方法について幅広い回答を求めています。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
>その他プログラミングのカテゴリにも同じ趣旨の内容ですが >VBAの角度からの質問をさせていただきました。 の方に、ダラダラと駄文の長文を書いてしまった DOUGLAS_ です。 >JavaScriptを使って作った(他社が作られたもの)WEBページがあり >そのページの・・・ 前の方の回答は、全く勘違いのものだったかもしれません。 例えば、 http://qpon.quu.cc/java/java07.htm のページには、 -- ここから引用 ---------------------------------- document.write('<form name="tokei">'); document.write('(typ=1)<br><input type="text" name="hms" size=36 style="font-size:12;text-align:center"><br><br>'); document.write('(typ=2)<br><input type="text" name="hms1" size=36 style="font-size:24;text-align:center;color:#ff0000;background-color:#ffff00"><br><br>'); document.write('(typ=3)<br><input type="text" name="hms2" size=36 style="font-size:24;text-align:center;background-color:#ffcccc;border-width:10"><br><hr>'); //document.write('<SELECT onChange="location.href=this.options[this.selectedIndex].value"> document.write('<br>タイプを変えてみてください<br>(typ=<SELECT name="sel">'); document.write('<OPTION SELECTED VALUE="1">1'); document.write('<OPTION VALUE="2">2'); document.write('<OPTION VALUE="3">3'); document.write('</SELECT>)<br>'); //document.write('(input type="text" name="sel" size=1 value="1">)<br>'); document.write('<input type="text" name="hms0" size=36 style="font-size:36;text-align:center;color:#ffff88;background-color:transparent;border-width:0">'); document.write('</form>'); -- ここまで引用 ---------------------------------- という Javascript で生成されたフォームがありますが、当該ページの html ソース自体には、「<form ~~>」という生のタグは一切ありません。 しかし、この状況でも、下記のように、「objIE.document.forms」のメンバとして、上記「document.write」の産物の「フォームエレメント」を拾うことができるようです。 objIE.document.forms(0).Length objIE.document.forms(0).name = "tokei" objIE.document.forms(0)(0).name = "hms" objIE.document.forms(0)(1).name = "hms1" objIE.document.forms(0)(2).name = "hms2" objIE.document.forms(0)(3).name = "sel" objIE.document.forms(0)(4).name = "hms0" objIE.document.forms(0)(0).type = "text" objIE.document.forms(0)(1).type = "text" objIE.document.forms(0)(2).type = "text" objIE.document.forms(0)(3).type = "select-one" objIE.document.forms(0)(4).type = "text" objIE.document.forms(0)(0).value = "2013 / 1 / 30 (WED) 14 : 06 : 48" objIE.document.forms(0)(1).value = "2013 / 1 / 30 (水) 14 : 06 : 48" objIE.document.forms(0)(2).value = "2013年1月30日 (水) 14時06分48秒" objIE.document.forms(0)(3).value = "3" objIE.document.forms(0)(4).value = "2013年1月30日 (水) 14時06分48秒" したがって、 1)ウォッチウィンドウで確認しながら「objIE.document.forms」のインデックスを取り、上記ページの場合でしたら、「objIE.document.forms(0)」 2)ウォッチウィンドウで「objIE.document.forms(0)(i).type」のところの「i」を「0」から順に入れていって、「値」が「text」になるものが「テキストボックス」ですから、そのときのインデックスで「テキストボックス」を捕まえることができます。 3)上の例では「i = 0,1,2,4」のときです。 4)複数のテキストボックスがあって、特定できない場合は、イミディエイトウィンドウに objIE.document.forms(0)(1).select などと入力して、[Enter] すると、「テキストボックス」にカーソルが移りますので、「(1)」のところのインデックスを変えながら特定することができます。 5)オプションボタンの場合は、 objIE.document.forms(0)(1).Click とすると、ラジオボタンがオンになります。
その他の回答 (1)
- OrangeCup150
- ベストアンサー率62% (109/174)
たぶん、インデックスで参照できると思います。 document.forms[0].elements[0].value http://www2.shikoku-u.ac.jp/people/murai-lab/soft2/chap3_11.html とりあえず、下のようにしたらうまくいきました。 ■foo.html <html> <head><title>Input Test</title></head> <body><form><input type="text"></form> </body> </html> ■処理例 Sheet1 にWebBrowser コントロールを配置しています。ステップ実行で実行してください。 Sub x() Sheet1.WebBrowser1.Navigate2 "C:\*****\foo.html" Sheet1.WebBrowser1.Document.Forms(0).Elements(0).Value = "foo" End Sub 注:パスは伏せています 補足 HTML ファイルの操作は読み込み完了イベントで行います。 (Sheet1 の WebBrowser1 の DocumentComplete ) Private Sub WebBrowser1_DocumentComplete(ByVal pDisp As Object, URL As Variant) Sheet1.WebBrowser1.Document.Forms(0).Elements(0).Value = "xxx" End Sub
お礼
ありがとうございます 動作確認させてもらい勉強になりました^^
お礼
ありがとうございます 詳しく教えていただいたおかげで VBA活用の幅が広がっております。 また機会がありましたらよろしくおねがいします。