VBAからWEB操作について

このQ&Aのポイント
  • ExcelのVBAを使用して、JavaScriptで作成されたWEBページの操作を行いたい場合、テキストボックスの名前の確認や指定方法についての質問です。
  • テキストボックスの名前が設定されていない場合、どのようにしてテキストボックスを指定するのかについてお知りになりたいです。
  • VBAの角度からの質問ですが、ExcelのVBAから他社が作成したJavaScriptで作られたWEBページのテキストボックスへの操作方法について幅広い回答を求めています。
回答を見る
  • ベストアンサー

VBAからWEB操作について

カテゴリがずれていたらすみません。 JavaScriptを使って作った(他社が作られたもの)WEBページがあり そのページの ”テキストボックスに文字を入れる”動きや ”オプションボタンをチェック”などの動きを ExcelのVBAから行っています。 テキストボックスの名前を知ろうとして ソースを表示させ、Nameの確認をしているのですが Nameが設定されていなかったりします。 こんなときはどのようにしてテキストボックスを指定すればよいのでしょうか? その他プログラミングのカテゴリにも同じ趣旨の内容ですが VBAの角度からの質問をさせていただきました。 こんな風にすれば良いよなど、ありましたら幅広い回答お待ちしております。

noname#201721
noname#201721

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

  • ベストアンサー
  • DOUGLAS_
  • ベストアンサー率74% (397/534)
回答No.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 とすると、ラジオボタンがオンになります。

noname#201721
質問者

お礼

ありがとうございます 詳しく教えていただいたおかげで VBA活用の幅が広がっております。 また機会がありましたらよろしくおねがいします。

その他の回答 (1)

回答No.1

たぶん、インデックスで参照できると思います。 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

noname#201721
質問者

お礼

ありがとうございます 動作確認させてもらい勉強になりました^^

関連するQ&A

  • VBAからWEB操作

    わかりにくい質問でしたらすみません。 VBAからWEB操作ができることを最近知り、 VBAで操作できる範囲のことから JavaScriptの勉強を始めています。 JavaScriptを使って他社が作ったWEBページの テキストボックスに文字を入れたり オプションボタンをチェックしたり するように作っています。 VBAの記述では以下のように使っています。 For Each obj inobjie.document.getelementsbytagname("input") if obj.type="radio" and obj.value="2" then obj.checked=true endif next ホームページからもらった記述を自分の環境に合わせたものなのですが getelementsbytagnameに"input"を入れると typeが取れるという感覚がなくて Nameが取れたりもしますし、何をどこまで取れるのかわからないのです。 "option"を入れたら 何が取れているんだろう?など… "a"だと、<a></a>の中身が取れているんだな…くらいまではなんとなくわかりました。 WEBページのソースを確認して、 テキストボックスの名前を調べたりしていますが Nameが設定されていなかったりもしますし そのときは、デバックでobjをウォッチしてひとつひとつ見たりしてるんですが こんな方法しかないのかなぁ?と思っています。 VBAを独学していたときは、勉強できるホームページがたくさんあったりしましたが VBAからのWEB操作については 独学ではこんな感じで進めるしかないのでしょうか 幅広い回答いただけるとうれしいです。 ※JavaScriptのほうにも、同じ趣旨の質問を書かせていただきました

  • VBAでjavascriptを操作

    カテゴリが違っていたら申し訳ありません。 VBAでIEを制御する際、色々調べているとjavascriptを使うシーンが たびたび出てくるのですが、あれはIEで読み込んだページ内にあるものを使っているのですか? それともIEの中に基本的な関数やメソッドが入っていて それも含め呼び出して使っているのでしょうか。 HTMLのソースを見てjavascriptのソースが分かるものについては、 それをVBAを使って動かすことはできるのは理解しています。 ページ内に存在しない基本的なjavascriptのコードは vbaだけで呼び出せたりするのですか? たとえば下記のページのOKボタンをクリックする場合、 http://kamicha1.web.fc2.com/Excel/Test20090726.html 下記のコードをVBEに記載しました。 このclick()はjavascriptの関数(メソッド?)なのでしょうか。 HTMLをclick()で検索しても該当はありませんでした。 ie.document.Script.setTimeout "javascript:document.getElementById('popOK').click()", 200 分かりにくい文章で申し訳ないのですが、 上記のコードはIDの部分を変えてればどんなページにも使えるものなのでしょうか。 恐れ入りますが、ご教示お願いします。

  • フレームを利用してのWebページの操作

    こんにちは。JavaScriptについてはほとんど初心者なので 教えていただきたいのですが、 フレームAのページでテキストボックスに入力したデータをボタンを押すことでフレームBのテキストボックスに、 書き込むことは可能でしょうか? JavaScriptサンプル集のページを参考に実験してみたところ、フレームA・フレームBのHTMLが自分のPC上にある場合は可能だったのですが、フレームBをWebページに指定すると途端にできなくなりました。テキストボックスの場所の指定も正しくできているのですが・・・ 参考ページ等、何かご存知でしたらお教え下さい。 よろしくお願いいたします。

  • DOM操作後の状態を再現するには

    PHPを使用したWebプログラミングを始めました。 基本的な事かもしれませんが、ご教示頂けますと幸いです。 テキストボックスに文字列を入力してサブミットし、サーバサイドの入力チェック処理で エラーとなった場合は入力ページに戻る、というのは一般的なWebサイトの仕組みかと思います。 上記入力ページで、JavascriptでDOMを操作してテキストボックスを一つ追加したとします。 2つのテキストボックスに文字列を入力してサブミットし、サーバサイドの入力チェック処理で エラーとなって入力ページに戻った場合、入力時にDOM操作で増やしたテキストボックスは 消えてしまっているのですが、そのテキストボックスと値はどのように再現すればいいのでしょうか?

  • VBA:webページのデータ取得

    お世話になります。 現在、VBAを勉強しており、webページのデータを取得するツールを個人的に開発しております。開発中に不明点がでましたのでご質問いたします。 ※インターネット上で一通り探しましたが、解決策は見つかりませんでした。 現状、HTMLファイルのデータは取得はできております。(ソースといわれるものです) ただ、ソース上にはjavascriptで記述されているところが多々あり、javascript側でHTMLを生成している場合、このデータを取得することができません。 ソースではなく、実際にwebページに表示されているHTML・CSSなどを取得したいと考えておりますが、取得する方法は存在するのでしょうか? もしご存知でしたらご教示いただきたく思います。 以上、よろしくお願いいたします。

  • VBAでテキストボックスに値を入れたい

    お世話になります。 エクセルのVBAで、WEBブラウザ内にあるテキストボックスに 文字を入れたいと思っております。 以下のようなページは処理できたのですが、 ・対象ページのブラウザのソースを見ると「textarea」のタグがあり、  それを取得して、「value」に文字を入れる 「スタイルシート」で書かれたページの処理の方法がわかりません。 お手数ですが、ご存じの方宜しくお願いします。

  • Excel VBA で Webからデータを取得する方法

    Excel VBAを使ってWebページからデータを 取得する方法を探しています。 最初に、そのWebページの認証ページにIDをパスワード をVBAから自動で送信したいのですが、方法が全く わかりません。 認証ページはJavascriptを利用したページです。 どちらかご存知の方がおられましたら、 ご教授ください。

  • name属性のないformタグの、中身を操作する方法を教えてください

    greasemonkeyを書こうと思っているのですが、その対象ページの<form>タグには、 name属性が無く、その中のテキストボックスやチェックボックスの操作をJavaScriptから行う事が出来ません。 スマートに操作するためにはどのようなやり方がよいでしょうか? document.nameが無いためにここの指定が出来ないのです.checked = check;

  • vba なのですが...

    EXCEL の VBA です ActiveX コントロールで テキストボックス があります その、テキストボックス のLostFocus時のイベントなんですが、 標準モジュールで書かれているソースを直接呼びたいです Private Sub TextBox1_LostFocus() から、callするのではなく、 直接 呼び出す方法はあるのでしょうか? おしえてください

  • 入力したテキストボックスのデータを別Webページに渡したい

    テキストボックスを持つ2つのWebページ(A.html,B.htmlとします)があります。 A.html内にB.htmlを開くJavaScript (window.open("B.html");)を記述しています。 このスクリプトを実行したらB.htmlを新しいウィンドウで開きますが、 このBページ内のテキストボックスに文字データを入力して、 OKを押したら、A.htmlのテキストボックスにデータを表示させたいのです。 こういうことはJavaScriptだけでできないのですか? cgi+JavaScriptを使わないとできないのでしょうか? フレーム間の場合はできそうですが、ウィンドウ間と言うのは出きるのか 不明です。 ご存知の方、よろしくお願いします。

専門家に質問してみよう