HOME > 即効テクニック > AccessVBA > フォーム・レポート > 開いているすべてのフォームを参照する

即効テクニック

フォーム・レポート

開いているすべてのフォームを参照する

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