VBAについて質問です。


先日、getElementById というものを教えていただきました。

getElementById("test2").Value = "値を入力します。"

これは 

<input name="test1" id="test2" value="">

というのがあるとしたら、idがtest2となっているところに 値を入力して下さい

というコードだと思うのですが、

VBAでname部分を基に値を受け渡しできるものはないでしょうか?

getElementByName("test1").Value = "値を入力します。"

というのが理想なのですが、自分で組んでみて、値を入力出来なかったため質問させていただきました。

お手数をおかけしますが、わかるかたおりましたらご回答よろしくお願いいたします。


回答の条件
  • 1人2回まで
  • 登録:
  • 終了:2009/12/15 17:28:18
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:HALSPECIAL No.1

回答回数407ベストアンサー獲得回数86

ポイント100pt

例えば

Document.All.GetElementByName("test1")(0).Value = "値を入力します。"

となります。


なお、同じ名前が複数ある場合は、(0)の引数が変わってきます。

id:aiomock

ご回答ありがとうございます。試してみます。

2009/12/15 15:08:29
  • id:aiomock
    現在自分が途中まで組んでいるコードです。

    Sub Macro()

    Set objIE = CreateObject("InternetExplorer.Application")
    objIE.Visible = True

    objIE.Navigate2 "https://auction.item.rms.rakuten.co.jp/rms/c2c/item/DI01P004_002?genreId=100837&d_id=adeb3763f8c312cd664405ef3da1db55"
    While objIE.ReadyState <> READYSTATE_COMPLETE Or objIE.Busy = True
    Sleep 200
    Wend

    '商品名の入力

    Dim A3 As Object
    Dim objDoc As Object
    Set A3 = objDoc.getElementByName("itemName")
    A3.Value = "商品名を書きます。"



    End Sub
  • id:aiomock
    変更してみましたがうまく実行できません。。
    お手数をおかけしますがコードを見ていただけないでしょうか。。

    Sub Macro()

    Set objIE = CreateObject("InternetExplorer.Application")
    objIE.Visible = True

    objIE.Navigate2 "https://auction.item.rms.rakuten.co.jp/rms/c2c/item/DI01P004_002?genreId=100837&d_id=adeb3763f8c312cd664405ef3da1db55"
    While objIE.ReadyState <> READYSTATE_COMPLETE Or objIE.Busy = True
    Sleep 200
    Wend

    '商品名の入力

    Dim Document As Object
    Set Document = objIE.Document
    Document.All.GetElementByName("itemName")(0).Value = "値を入力します。"

    End Sub
  • id:aiomock
    出力したいところのnameタグは以下のようになっているので間違いないと思うのですが、、、。
    idタグがないのでname指定をやはりしないといけないのでしょうか。。

    <table border="0" width="138" cellspacing="0" cellpadding="0">
    <tr valign="top">
    <td><b><font size="-1" color='#000000'>商品名</font></b></td>
    <td align="right" nowrap><b><font size="-1" color='#bf0000'>【必須】</font></b></td>
    </tr>
    </table>
    </td>
    <td bgcolor="#FFFFFF" width="439">
    <input type="text" name="itemName" maxlength="255" size="50" value="">
    <br>
    <font size="-1" color="#666666">&lt;全角35文字まで&gt;<a href="javascript:void(window.open('http://help.rakuten.co.jp/mw/?hid=177','help','scrollbars=yes,resizable=yes,width=410,height=300,left=5,top=5'))">記載できない文字・表現について</font>
    <img src="/acom/pc/img/item/help_icon.gif" alt="ヘルプ" width="15" height="11" hspace="2" border="0">
    </a>

    </td>
  • id:HALSPECIAL
    HALSPECIAL 2009/12/15 15:22:47
    ぱっと見、よさげなのですが、
    エラーは何とでますか?
    デバッガはどこのラインで止まりますか?

    READYSTATE_COMPLETE
    の定数は宣言されていますよね?


    ためしに、
    Document.GetElementByName("itemName")(0).Value = "値を入力します。"
    もやってみてください。
  • id:aiomock
    通常通りIEが起動はするのですが、起動した後エクセルに戻ると

    デバッガが以下で止まり、

    Document.GetElementByName("itemName")(0).Value = "値を入力します。"

    オブジェクトは、このプロパティまたはメソッドをサポートしていません。
    とメッセージを返します。
  • id:aiomock
    READYSTATE_COMPLETE の定数は宣言していません。。。

    Dim READYSTATE_COMPLETE As Object

    を入れればよいのでしょうか?

    初心者質問で申し訳ありません。。
  • id:aiomock
    Document.GetElementByName("itemName")(0).Value = "値を入力します。

    試してみました。

    結果は同じエラーを返すみたいです。

    お手数おかけします。。
  • id:HALSPECIAL
    HALSPECIAL 2009/12/15 15:55:11
    Document.GetElementByName("itemName")[0].Value = "値を入力します。
    か、
    Document.All.GetElementByName("itemName")[0].Value = "値を入力します。
    でどうでしょう。
  • id:aiomock
    ご回答ありがとうございます。

    Document.All.GetElementByName("itemName")(0).Value = "値を入力します。"

    で試してみましたが、無理でした。。

    出力できない状況です。
  • id:ken3memo
    http://hpcgi1.nifty.com/MADIA/VBBBS2/wwwlng.cgi?print+200504/05040004.txt
    の最後に
    >魔界の仮面弁士 2005/04/01(金) 21:32:31
    >> DHTMLにgetElementByNameは無いですね(^^;
    >
    >getElementByName メソッドはありませんが、
    >getElementsByName メソッドや
    >getElementById メソッドや
    >getElementsByTagName メソッドなどがありますよ。
    >
    getElementByNameが無くて、もしかして、sが必要?getElementsByName微妙に違うとか?
    面白いので、一息ついたら自分でも確認してみよう。

  • id:ken3memo
    Sub ie_test() 'IEの表示をテストする。

    'IEの起動
    Dim objIE As Object '変数を定義します。
    Set objIE = CreateObject("InternetExplorer.Application") 'オブジェクトを作成します。
    objIE.Visible = True '可視、Trueで見えるようにします。

    '処理したいページを表示します。
    objIE.Navigate "http://www.google.co.jp/"

    'ページの表示完了を待ちます。
    While objIE.ReadyState <> 4 Or objIE.Busy = True '.ReadyState <> 4の間まわる。
    DoEvents '重いので嫌いな人居るけど。
    Wend

    objIE.Document.getElementsByName("q")(0).Value = "三流"

    End Sub

    s無しのgetElementByNameはエラーで、
    getElementsByNameだとOKみたいです。

    なんか、他の人もひっかかっているみたいです。
    http://blog.livedoor.jp/laddy/archives/50868957.html

    何かの参考となれば、幸いです。
  • id:HALSPECIAL
    HALSPECIAL 2009/12/15 16:41:14
    ken3memo さん。
    いつもフォロー済みません。

    getElementsByNameはないんでしょうかね^^;


    Document.GetElementByName("itemName")[0].Value = "値を入力します。
    か、
    Document.All.GetElementByName("itemName")[0].Value = "値を入力します。
    でどうでしょう。

    カッコじゃなくて、 [  なんですが、ダメですかね。
    ちょっと試せなくてすみません。


  • id:ken3memo
    よく、javascriptでみかける[0]は、コンパイルエラーでした。
    http://f.hatena.ne.jp/ken3memo/20091215164707
  • id:HALSPECIAL
    HALSPECIAL 2009/12/15 17:06:36
    ken3memoさん、試してもらっちゃってすみません。^^;
    GetElementByName メソッドはないんですかね。


    aiomockさん、
    では、代替案で、こんな参照の方法はどうでしょう。

    Document.forms("FORM1").Value = "値を入力します。"
    Document.FORM1.Value = "値を入力します。"

    なお、FORM1 のところは
    formタグのname です。
    http://www.tohoho-web.com/js/form.htm
  • id:ken3memo
    >getElementsByNameはないんでしょうかね^^;
    あっ、これはあって、
    回答1のDocument.All.GetElementByName("test1")(0).Value = "値を入力します。"
    .GetElementByName の s無しがNGみたいです。
    なので、
    objIE.Document.GetElementsByName("test1")(0).Value = "値を入力します。"
    で行くと思いますが・・・
    私も詳しくなくてスミマセン。なんで.GetElementByName と .GetElementsByName があるのか?わからなくて。
    objIE.Document.getElementsByName("q")(0).Value = "三流"
    でgoogleにセットできたので、.getElementsByNameは使えると思います。
    宣伝兼ねて http://d.hatena.ne.jp/ken3memo/20091215/1260863087 でイロイロ試したけど、コレだって回答が作れなかったです。。。

    ※私も横から入り、混乱させてスミマセンでした。
    objIE.Document.getElementsByName("名前")(0).Value = "値"
    を試してみてください。

  • id:aiomock
    ご回答ありがとうございます。

    無事解決することができました。お手数をおかけしました。

    ありがとうございます^^。
  • id:aiomock
    HALSPECIAL さん

    ご回答ありがとうございます。

    Document.forms("FORM1").Value = "値を入力します。"

    ですが、入力ができませんでした。

    Sub Macro2()

    'IEの起動
    Dim objIE As Object '変数を定義します。
    Set objIE = CreateObject("InternetExplorer.Application") 'オブジェクトを作成します。
    objIE.Visible = True '可視、Trueで見えるようにします。

    '処理したいページを表示します。
    objIE.Navigate "https://auction.item.rms.rakuten.co.jp/rms/c2c/item/DI01P004_002?genreId=100837&d_id=9214aa4c86f6fb3b96da3073bd25082e"

    'ページの表示完了を待ちます。
    While objIE.ReadyState <> 4 Or objIE.Busy = True '.ReadyState <> 4の間まわる。
    DoEvents '重いので嫌いな人居るけど。
    Wend

    '商品名の入力
    Dim Document As Object
    Document.forms("itemName").Value = "値を入力します。"



    End Sub


    今のところ ken3memo さんの GetElementsByName で出来ておりますのでそちらで行こうとおもうのですが、次のSTEPでまた引っかかってしまったので、その解決策として是非 Document.forms 等も取り入れられればと考えております。

    いつも本当に回答ありがとうございます。

この質問への反応(ブックマークコメント)

トラックバック

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません