フォーム内の入力欄などを操作する方法
(目次)
1.概要
ここでは、スクリプトからフォーム内の入力欄にテキストを入力したり、チェックボックスをチェックしたりする方法を紹介します。
動作確認用のサンプルスクリプトも紹介しています。スクリプトパネルから実行してください。各項のスクリプトのサンプルは「10.動作確認用フォーム」にあるフォームに対して動作します。
2.form要素を取得する
フォームを操作するには、操作するフォームのform要素を取得する必要があります。
ScriptBrowserKのスクリプトの記録機能を使用すると、form要素を取得するスクリプトを簡単に作成できます。
- スクリプトパネルで「スクリプトの記録()」をクリックしてスクリプトの記録状態にします。
- 目的のフォーム内の要素(入力欄やチェックボックス)をクリックします。ここでは、「9.動作確認用フォーム」の「テキスト」欄をクリックしたとして解説します。
- すると、[記録されたスクリプト欄]に下のようなスクリプトが記録されます。
ActiveDocument.Forms("form1").Elements("textfield", 0).Click
name属性の値が同じフォームが複数ある場合は、下記の様に Forms に更に順番を表す引数が追加されて記録されます。
ActiveDocument.Forms("form1", 1 ).Elements("textfield", 0).Click
form要素にid属性やname属性が設定されていない場合は下のように、Formsの引数がインデックス番号で記録される場合もあります。
ActiveDocument.Forms(0).Elements("textfield", 0).Click
- 記録された行で、「ActiveDocument.Forms("form1")」の部分がform要素を取得(form要素にアクセス)している部分です。
実際にスクリプトを作成する場合は下のようにform要素を変数に代入して、その変数を介してフォームを操作するのが便利でしょう。
Set form = ActiveDocument.Forms("form1")
- スクリプトパネルで「スクリプトの記録()」をクリックしてスクリプトの記録状態を解除します。
3.テキストボックス(input type=text, password)への入力
対象となるのは単一行の入力エリアです。input要素のtype属性がtext, passwordのものが該当します。
テキストを入力するにはvalue属性に設定したい文字列を代入するだけです。
下のスクリプトは「10.動作確認用フォーム」の「テキスト」欄に「Text テスト」 という文字列を、入力します。
ActiveDocument.Forms("form1").Elements("textfield", 0).value = "Text テスト"
※ type属性が file の場合はセキュリティ上の問題から value属性は読み取り専用になっています。
対策として、下記のようにフォーカスを移動してから SendKeys を使用すると値を設定することができます。
ActiveDocument.Forms("form1").Elements("FILE_A", 0).Focus SendKeys("c:\test\test.html")
4.テキストエリア(textarea)への入力
対象となるのは複数行の入力欄です。textarea要素がこれに該当します。
テキストを入力するにはvalue属性に設定したい文字列を代入するだけです。
下のスクリプトは「10.動作確認用フォーム」の「TextArea テスト」 という文字列を、「テキストエリア」欄に入力します。
ActiveDocument.Forms("form1").Elements("textarea", 0).value = "TextArea テスト"
5.チェックボックス(input type=checkbox)の選択
対象となるのはinput要素(type=checkbox)です。チェックするにはChecked属性にTRUEを、チェックをはずすにはFALSEを代入します。
下のスクリプトは「10.動作確認用フォーム」の3つのチェックボックスを全てチェック状態にします。
ActiveDocument.Forms("form1").Elements("checkbox1", 0).Checked = TRUE ActiveDocument.Forms("form1").Elements("checkbox1", 1).Checked = TRUE ActiveDocument.Forms("form1").Elements("checkbox2", 0).Checked = TRUE
6.ラジオボタン(input type=radio)の選択
対象となるのはinput要素(type=radio)です。選択するにはchecked属性にTRUEを、選択を解除するにはFALSEを代入します。
ラジオボタンのどれか1つのchecked属性にTRUEを代入すると、他のname属性の値が同じラジオボタンのchecked属性はFALSEになります。
下のスクリプトは「10.動作確認用フォーム」で左から順にラジオボタンをチェックします。最後の行が実行されると(スクリプト実行後の状態は)「Radio 1-3」がチェック状態になり、他の2つのラジオボタンはチェックが外れた状態になります。
ActiveDocument.Forms("form1").Elements("radio1", 0).Checked = TRUE ActiveDocument.Forms("form1").Elements("radio1", 1).Checked = TRUE ActiveDocument.Forms("form1").Elements("radio1", 2).Checked = TRUE
7.セレクトボックス(select, ドロップダウン形式)の項目の選択
対象となるのはselect要素のsize属性が1か、size属性が省略されているものです。
選択状態を変更するには下の2つの方法があります。
- select要素のvalue属性にoption要素のvalue属性の値を代入する
- select要素のoptions集合のなかから選択したい項目のoption要素(Index番号を指定する)のselected属性にTRUEを代入する
下のスクリプトは「10.動作確認用フォーム」でSelect1_1を選択した後に、Select1_2を選択します。
ActiveDocument.Forms("form1").Elements("select1", 0).value="Select1_1" ActiveDocument.Forms("form1").Elements("select1", 0).options(1).selected=TRUE
8.セレクトボックス(select, リスト形式。複数選択不可)の項目の選択
対象となるのはselect要素のsize属性が2以上で、multiple属性が指定されていないものです。
上の「7.」項のセレクトボックス(ドロップダウン形式)と同様に選択状態を変更するには下の2つの方法があります。
- select要素のvalue属性にoption要素のvalue属性の値を代入する
- select要素のoptions集合のなかから選択したい項目のoption要素(Index番号を指定する)のselected属性にTRUEを代入する
下のスクリプトは「10.動作確認用フォーム」でSelect2_1を選択した後に、Select2_2を選択します。
ActiveDocument.Forms("form1").Elements("select2", 0).value="Select2_1" ActiveDocument.Forms("form1").Elements("select2", 0).options(1).selected=TRUE
9.セレクトボックス(select, リスト形式。複数選択可)の項目の選択
対象となるのはselect要素のsize属性が2以上で、multiple属性が指定されているものです。
選択状態を変更するには、select要素のoptions集合のなかから選択したい項目のoption要素(Index番号を指定する)のselected属性にTRUEまたはFALSEを代入します。
下のスクリプトは「10.動作確認用フォーム」でSelect3の1〜3全ての項目を選択します。
ActiveDocument.Forms("form1").Elements("select3", 0).options(0).selected=TRUE ActiveDocument.Forms("form1").Elements("select3", 0).options(1).selected=TRUE ActiveDocument.Forms("form1").Elements("select3", 0).options(2).selected=TRUE
10.動作確認用フォーム
11.フォームを操作するスクリプトの例
上の動作確認用フォームを操作するスクリプトの例です。このページを表示した状態で実行してください。
「2.」で解説したように、form変数にform要素を代入しています。基本的に上で解説した内容を順次実行しているだけです。
set form = ActiveDocument.Forms("form1") form.Elements("textfield", 0).value = "Text テスト" form.Elements("textarea", 0).value = "TextArea テスト" form.Elements("checkbox1", 1).Checked = TRUE form.Elements("radio1", 1).Checked = TRUE form.Elements("select1", 0).value="Select1_1" form.Elements("select2", 0).options(1).selected=TRUE form.Elements("select3", 0).options(1).selected=TRUE form.Elements("select3", 0).options(2).selected=TRUE
以上です。
2007/05/21:初版
2008/02/12:type属性が file の場合を修正
2009/07/08:name属性の値が同じフォームが複数ある場合について加筆