即効テクニック |
● 概要 ● 構文 expression.Forms 取得のみ 設定項目 内容 expression Applicationオブジェクト[省略可能] 開いているすべてのFormオブジェクトを含むFormsコレクションを参照します。を省略すると、自身のApplicationオブジェクトを指定したことになります。 次のコードは、現在開いているフォームの名前を列挙するものです。for Each...Nextステートメントを利用して、Formsコレクションに含まれるFormオブジェクトを1つずつ参照しています。 ● サンプル1 ● '開いているフォームを列挙する Sub FormsSample1() 'フォーム参照用 Dim myForm As Form 'メッセージ出力用 Dim myStr As String myStr = "" '開いているフォームを1つずつ参照する For Each myForm In Forms 'フォーム名を取得 myStr = myStr & myForm.Name & vbCr Next 'メッセージボックスに開いているフォームの名前を表示する MsgBox myStr End Sub ● 補足1 ● Formsコレクションに含まれる各Formオブジェクトは、下表のいずれかの方法で、参照することができます。 フォーム名にスペースが含まれる場合は、フォーム名を角カッコで囲んで指定します。 また、Formオブジェクトには、0から始まるインデックスが付けられており、インデックスを利用して参照することができます。 なお、インデックスはフォームを開いた順番に付けられます。 ・FormsコレクションによるFormオブジェクトの参照例 構文 使用例 Forms!formname Forms!受注フォーム Forms![form name] Forms![受注 フォーム] Forms("formname") Forms("受注フォーム") Forms(index) Forms(0) ● サンプル2 ● 前述のサンプル1のコードは、インデックスによる参照を利用して、次のように書くこともできます。 '開いているフォームを列挙する Sub FormsSample2() 'インデックス用 Dim i As Integer 'メッセージ出力用 Dim myStr As String ’補足2 For i = 0 To Forms.Count - 1 'フォーム名を取得 myStr = myStr & Forms(i).Name & vbCr Next 'メッセージボックスに開いているフォームの名前を表示する MsgBox myStr End Sub ● 補足2 ● 「For i = 0 To Forms.Count - 1」では、インデックスの最大値を、Countプロパティを用いて求めています。 インデックスは0から始まるので、最大値はCountプロパティの値から1引いたものになります。 ● サンプル3 ● インデックスは一定でないため、特定のFormオブジェクトを参照したい場合は、下記のようにフォーム名を使用します。 '特定のオブジェクトを参照したい場合 '指定したフォームにフォーカスを移動する '[商品入力フォーム] を開いた状態で実行してください Sub FormsSample3() '商品入力フォームにフォーカスを移動する Forms!商品入力フォーム.SetFocus End Sub ● 注意 ● Formsコレクションは、現在開いているフォームのコレクションです。参照しようとしたフォームが開いていない場合、エラーの原因となりますので、注意してください。