7.10 フォームの操作3/フォーム名やコントロール名が無い場合
 入力フォーム(<form>タグ)やフォーム内のコントロール(<input>タグ)は必ず名前(nameエレメント)が定義されているとは限りません。名前が付いてないフォームやコントロールを扱う場合は、DocumentオブジェクトのFormsコレクションやItemコレクションを使います。
Formsコレクションの書式と使い方
 Formsコレクションは、ウェブページ内にある入力フォーム(Formsオブジェクト)が格納されているコレクションです。<form>タグにフォーム名(nameエレメント)が定義されていないときは、このコレクションを使ってフォームを指定します。

 図1:Formsコレクション
InternetExplorerオブジェクト.Document.Forms(n).プロパティやメソッド
n(フォーム番号)
 ウェブページ内にある入力フォームを番号で指定します。先頭は0です。

【記述例1】1番目のフォームを送信する
objIE.Document.Forms(0).Submit

【記述例2】2番目のフォームのテキストボックスへ文字列をセットする
objIE.Document.Forms(1).txtName.Value = "漢字氏名"
Itemコレクションの書式と使い方
 Itemコレクションは、<form>タグで作成した入力フォーム内あるテキストボックスやチェックボックスなどのコントロールが格納されているコレクションです。<input>タグ、<textarea>タグ、<select>タグにコントロール名(nameエレメント)が定義されていないときは、このコレクションを使ってコントロールを指定します。

 なお、フォーム名が定義されていない場合は、Formsコレクションと組み合わせて使います。

 図2:Itemコレクション
InternetExplorerオブジェクト.Document.Formオブジェクト.Item(n).プロパティやメソッド
n(コントロール番号)
 入力フォーム内にあるコントロールを番号で指定します。先頭は0です。

【記述例1】入力フォーム"FM1"の1番目のコントロールへ文字列をセットする
objIE.Document.FM1.Item(0).Value = "文字列"

【記述例2】1番目の入力フォームの4番目のコントロールをFalseにする
objIE.Document.Forms(0).Item(3).checked = False
使用例
 名前が定義されていないフォームやコントロールを操作する例です。内容的には7.8 フォームの操作1と同じですが、このサンプルの入力フォームやコントロールにはNameエレメントがありません。

 ちなみに、サンプルの最後でフォームを送信していますが、送信先のURLは架空のものです。試してみたい場合は、cgiaspなどで試験用のアプリケーションや環境を用意し、そこへ向けて発射送信の実験をしてください。くれぐれも、他人の掲示板などで発射送信実験をしないでください。

Option Explicit

Dim objIE

'objIEオブジェクトを作成します
Set objIE = CreateObject("InternetExplorer.Application")

'ウィンドウの大きさを変更します
objIE.Width = 800
objIE.Height = 600

'表示位置を変更します
objIE.Left = 0
objIE.Top = 0

'インターネットエクスプローラ画面を表示します
objIE.Visible = True

'カラのページを表示します
'(これを行わないと以降のdocument.writeなどがエラーになるため)
objIE.Navigate "about:blank"

'HTMLを出力します
objIE.Document.Write "<html>" & vbcrlf
objIE.Document.Write "<head>" & vbcrlf
objIE.Document.Write "<title>7.10 名前が無いフォームやコントロールの操作サンプル</title>" & vbcrlf
objIE.Document.Write "</head>" & vbcrlf
objIE.Document.Write "<script language=""javascript"">" & vbcrlf
objIE.Document.Write "function msg1() {" & vbcrlf
objIE.Document.Write "    alert(""わっ!"");" & vbcrlf
objIE.Document.Write "}" & vbcrlf
objIE.Document.Write "</script>" & vbcrlf
objIE.Document.Write "<body>" & vbcrlf
objIE.Document.Write "<form>" & vbcrlf
objIE.Document.Write "<table border=1 cellpadding=2 cellspacing=0>" & vbcrlf
objIE.Document.Write "<tr>" & vbcrlf
objIE.Document.Write "<td>名前<br></td>" & vbcrlf
objIE.Document.Write "<td><input type=text size=10><br></td>" & vbcrlf
objIE.Document.Write "</tr>" & vbcrlf
objIE.Document.Write "<tr>" & vbcrlf
objIE.Document.Write "<td>性別<br></td>" & vbcrlf
objIE.Document.Write "<td>" & vbcrlf
objIE.Document.Write "<select>" & vbcrlf
objIE.Document.Write "<option value=""0""></option>" & vbcrlf
objIE.Document.Write "<option value=""1"">男</option>" & vbcrlf
objIE.Document.Write "<option value=""2"">女</option>" & vbcrlf
objIE.Document.Write "</select>" & vbcrlf
objIE.Document.Write "</td>" & vbcrlf
objIE.Document.Write "</tr>" & vbcrlf
objIE.Document.Write "<tr>" & vbcrlf
objIE.Document.Write "<td>E-Mail<br></td>" & vbcrlf
objIE.Document.Write "<td><input type=text size=30><br></td>" & vbcrlf
objIE.Document.Write "</tr>" & vbcrlf
objIE.Document.Write "<tr>" & vbcrlf
objIE.Document.Write "<td>URL<br></td>" & vbcrlf
objIE.Document.Write "<td><input type=text size=50><br></td>" & vbcrlf
objIE.Document.Write "</tr>" & vbcrlf
objIE.Document.Write "<tr>" & vbcrlf
objIE.Document.Write "<td>チェックボックス<br></td>" & vbcrlf
objIE.Document.Write "<td><input type=checkbox size=50><br></td>" & vbcrlf
objIE.Document.Write "</tr>" & vbcrlf
objIE.Document.Write "<tr>" & vbcrlf
objIE.Document.Write "<td>ラジオボタン<br></td>" & vbcrlf
objIE.Document.Write "<td>" & vbcrlf
objIE.Document.Write "<input type=radio radSelect value=1>A<br>" & vbcrlf
objIE.Document.Write "<input type=radio radSelect value=2>B<br>" & vbcrlf
objIE.Document.Write "<input type=radio radSelect value=3>C<br>" & vbcrlf
objIE.Document.Write "</td>" & vbcrlf
objIE.Document.Write "</tr>" & vbcrlf
objIE.Document.Write "<tr>" & vbcrlf
objIE.Document.Write "<td>押してみて<br></td>" & vbcrlf
objIE.Document.Write "<td>" & vbcrlf
objIE.Document.Write "<input type=button value=Click onClick=""msg1()"">" & vbcrlf
objIE.Document.Write "</td>" & vbcrlf
objIE.Document.Write "</tr>" & vbcrlf
objIE.Document.Write "</table>" & vbcrlf
objIE.Document.Write "</form>" & vbcrlf
objIE.Document.Write "</body>" & vbcrlf
objIE.Document.Write "</html>" & vbcrlf

'フォームを設定します
objIE.Document.Forms(0).Item(0).Value ="結城圭介"
objIE.Document.Forms(0).Item(1).selectedIndex = 1
objIE.Document.Forms(0).Item(2).value ="webmaster@happy2-island.com"
objIE.Document.Forms(0).Item(3).value ="http://www.happy2-island.com/"
objIE.Document.Forms(0).Item(4).checked = True
objIE.Document.Forms(0).Item(6).checked = True
objIE.Document.Forms(0).Item(8).click 'ボタンをクリックする

'@送信に必要な情報を設定しフォームを送信します
'(URLは架空のもので存在しません)
objIE.Document.Forms(0).Action="http://abc.xyxyxy-xyxyxy.zzz/"
objIE.Document.Forms(0).Method="POST"
objIE.Document.Forms(0).Submit

'送信後のページ切り替えが終わるまでココでグルグル回る
Do Until objIE.Busy = False
   '空ループだと無駄にCPUを使うので250ミリ秒のインターバルを置く
   WScript.sleep(250)
Loop

'送信が完了したらコンソールにメッセージを表示
WScript.echo "送信しました"

'オブジェクトの破棄
Set objIE = Nothing
Copyright(C) 1999-2006 結城圭介。 All rights reserved