● 概要 ●
構文 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コレクションは、現在開いているフォームのコレクションです。参照しようとしたフォームが開いていない場合、エラーの原因となりますので、注意してください。