配列、リスト、またはコレクションの要素ごとにブロックステートメントを繰り返し実行します。ここでの「コレクション」は、LSX 内で定義されたクラスであり、特に Forall と共に使用するために有効にされたクラスを指します (LSX ツールキットのマニュアルを参照)。OLE オートメーション経由でアクセスされる外部プログラムでも、プログラムのオブジェクトで Forall を使用できる場合があります。
Notes®「製品オブジェクト」の組み込みクラス (NotesDocumentCollection など) は Forall のコレクションとして使用できません。ただし、組み込みオブジェクトの一部のプロパティ (NotesDatabase.Forms など) は配列の値を返すため、これらの配列を Forall でスキャンできます。
ForAll refVar In container
[ statements ]
End ForAll
refVar
配列、リスト、またはコレクションの要素の参照変数。ForAll ループ本体では、container で指定した配列、リスト、コレクションの各要素を refVar を使用して参照できます。refVar には、データ型接尾辞を追加できません。
container
要素を処理する配列、リスト、またはコレクションです。
ループに入ると、refVar は配列、リスト、またはコレクションの最初の要素を参照します。繰り返しが成功するたびに、refVar は次の要素を参照します。ループが完了すると、実行はループの End ForAll ステートメントに続く最初のステートメントから続行されます。
コレクションとは、LSX モジュール内で Forall と共に使用するための特別なクラスです (LSX ツールキットのマニュアルを参照)。OLE オートメーション経由でアクセスされる外部プログラムでも、プログラムのオブジェクトで Forall を使用できる場合があります。
NotesDocumentCollection などの Notes 製品のオブジェクトの場合、コレクションとして Forall と共に使用することはできません。ただし、配列を返すプロパティ (NotesDatabase の Forms など) の場合、Forall と共に使用することができます。
Exit ForAll ステートメントや GoTo ステートメントでループが終了する前に、強制的に終了できます。Exit ForAll に到達すると、実行はすぐにループのターミネータ (End ForAll) に続く最初のステートメントに移ります。GoTo ステートメントに到達すると、実行はすぐに指定されたラベルのあるステートメントに移ります。
refVar は実際の配列、リスト、またはコレクションの要素の別名であるため、refVar に新しい値を代入することでその要素の値を変更できます。以下に例を示します。
ForAll x In y
x = x + 1
End ForAll
このスクリプトは、y という名前の配列、リスト、またはコレクションの各要素の値に 1 を加えます。
container がリストの場合、refVar が現在参照しているリスト要素の名前 (リストタグ) を得るために refVar を ListTag 関数に渡すことができます。次に例を示します。
Print ListTag(refVar)
refVar は ForAll ステートメントで暗黙に定義されるため、独自の変数宣言には含められません。refVar のスコープはループであるため、ループの外側からは参照できません。
container が配列やリストの場合、refVar のデータ型は処理されている配列やリストのデータ型と同じです。このデータ型をコンパイル時に判別できないときや、container がコレクションのときは、refVar は Variant 型です。その場合、Variant 型にはユーザー定義データ型の値を代入できないため、配列やリストのデータ型にユーザー定義データ型を使用することはできません。
refVar は、後の ForAll ループで、refVar が最初定義された ForAll ループ内で使用された内容のデータ型と一致すると再利用されます。
参照変数には ReDim ステートメントを使用できません。例えば、zArr が配列の配列で、ForAll ステートメントが次のように始まると仮定します。
ForAll inzArr In zArr
この場合、ステートメント ReDim inzArr(2) はエラーとなります。