VBAからIEを操作するときに、
getElementByName だと、通らなくて、
getElementsByName だと、OK、そんな不思議な話があるみたいです。
みなさんも、実際にテストしてみてください。
↓OKパターン(動きます)
Option Explicit 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 'google検索項目(name=q)にセットする。 objIE.Document.getElementsByName("q")(0).Value = "三流" End Sub
まぁ、こんな感じです。
自分でも不思議です。。。う〜ん、なぜと聞かれると答えにくいですね。
もしかして、sだと配列で返すので(0)でs無しはそのまま使えるのかなぁ?
またまた、気になるけど、ひとまずこんな感じでした。
http://q.hatena.ne.jp/1260856896 が キッカケでした。
よく、javascriptでみかける[0]は、コンパイルエラーでした。
実行時エラー '431'えっ、.allからだと、何でだ・・・これは、表示待ちかなぁそれとも?
↑、あれれ、普通、.allがない方が怪しいのに。.bodyだと大丈夫なのか?試してみたくなった。
.bodyもNGで実行時エラー431でした。
う〜ん、
http://social.msdn.microsoft.com/Forums/ja-JP/csharpgeneralja/thread/f8e740ab-ff9b-46a4-b274-7e1805315ce4
↑ここみると、.allで行ってるから違うなぁ。[0]でも通っているし(これは、言語かなぁ)
まぁ、そんな感じで、疑問がイロイロと残りますね。
いつも、楽して、
.all("名前")とかやっているから、キレイに書く .getElementsByNameとか出てくると答えに困ってしまったり・・・