Form オブジェクト (Access)

        **Form** オブジェクトは、Microsoft Access の特定のフォームを参照するために使用します。

解説

Form オブジェクトは、現在開いているすべてのフォームのコレクションである Forms コレクションのメンバーです。 Forms コレクション内で、個々のフォームのインデックスは 0 から始まります。 Forms コレクションの各 Form オブジェクトは、そのフォームの名前またはコレクションで付けられたインデックスを使って参照できます。

コレクションで付けられたインデックスは変わる可能性があるので、 Forms コレクションのフォームを参照する場合は、名前でフォームを参照することをお勧めします。 フォーム名にスペースが含まれる場合は、名前を角かっこ ([ ]) で囲む必要があります。

構文
AllForms!formname AllForms!OrderForm
AllForms![form name] AllForms![Order Form]
AllForms("formname") AllForms("OrderForm")
AllForms(index) AllForms(0)

それぞれの Form オブジェクトには Controls コレクションがあり、このコレクションにはフォームのコントロールがすべて含まれています。 Controls コレクションを暗黙的または明示的に参照して、フォームのコントロールを参照できます。 Controls コレクションを暗黙的に参照するほうが、コードの処理速度は速くなります。 次の例は、[OrderForm] フォームの [NewData] コントロールを参照する 2 とおりの方法です。

 ' Implicit reference. 
Forms!OrderForm!NewData
' Explicit reference. 
Forms!OrderForm.Controls!NewData

次の例は、[OrderForm] フォームに含まれる [ctlSubForm] サブフォームの [NewData] コントロールを参照する 2 とおりの方法です。

Forms!OrderForm.ctlSubForm.Form!Controls.NewData
Forms!OrderForm.ctlSubForm!NewData

以下の例は、クエリの日付の抽出条件を指定する目的で、TextBox コントロールを使用する方法を示します。

Private Sub cmdSearch_Click()

   Dim db As DAO.Database
   Dim qd As QueryDef
   Dim vWhere As Variant

   Set db = CurrentDb()

   On Error Resume Next
   db.QueryDefs.Delete "Query1"
   On Error GoTo 0

   vWhere = Null

   vWhere = vWhere & " AND [PayeeID]=" + Me.cboPayeeID

   If Nz(Me.txtEndDate, "") <> "" And Nz(Me.txtStartDate, "") <> "" Then
      vWhere = vWhere & " AND [RefundProcessed] Between #" & _
      Me.txtStartDate & "# AND #" & Me.txtEndDate & "#"
   Else
      If Nz(Me.txtEndDate, "") = "" And Nz(Me.txtStartDate, "") <> "" Then
         vWhere = vWhere & " AND [RefundProcessed]>=#" _
                  + Me.txtStartDate & "#"
      Else
         If Nz(Me.txtEndDate, "") <> "" And Nz(Me.txtStartDate, "") = "" Then
            vWhere = vWhere & " AND [RefundProcessed] <=#" _
                     + Me.txtEndDate & "#"
      End If
     End If
   End If

   If Nz(vWhere, "") = "" Then
      MsgBox "There are no search criteria selected." & vbCrLf & vbCrLf & _
             "Search Cancelled.", vbInformation, "Search Canceled."
   Else
      Set qd = db.CreateQueryDef("Query1", "SELECT * FROM tblRefundData? & _
               " WHERE " & Mid(vWhere, 6))
      db.Close
      Set db = Nothing

      DoCmd.OpenQuery "Query1", acViewNormal, acReadOnly
   End If
End Sub

次の例は、フォームの BeforeUpdate イベントを使用して、1 つのコントロールにデータが含まれている場合にそれとは別のコントロールへの値の入力を要求する方法を示します。

Private Sub Form_BeforeUpdate(Cancel As Integer)
If (IsNull(Me.FieldOne)) Or (Me.FieldOne.Value =  "") Then
    ' No action required
Else
    If (IsNull(Me.FieldTwo)) or (Me.FieldTwo.Value = "") Then
        MsgBox "You must provide data for field 'FieldTwo', " & _
            "if a value is entered in FieldOne", _
            vbOKOnly, "Required Field"
        Me.FieldTwo.SetFocus
        Cancel = True
        Exit Sub
    End If
End If

End Sub

次の例は、OpenArgs プロパティを使用して、ナビゲーション ウィンドウからフォームが開かれないようにする方法を示します。

Private Sub Form_Open(Cancel As Integer)

If Me.OpenArgs() <> "Valid User" Then
    MsgBox "You are not authorized to use this form!", _
        vbExclamation + vbOKOnly, "Invalid Access"
    Cancel = True
End If
End Sub

次の例では、OpenForm メソッドの WhereCondition 引数を使用して、フォームを開くときにフォームに表示されるレコードをフィルター処理する方法を示します。

Private Sub cmdShowOrders_Click()
If Not Me.NewRecord Then
    DoCmd.OpenForm "frmOrder", _
        WhereCondition:="CustomerID=" & Me.txtCustomerID
End If
End Sub

イベント

メソッド

プロパティ

関連項目

サポートとフィードバック

Office VBA またはこの説明書に関するご質問やフィードバックがありますか? サポートの受け方およびフィードバックをお寄せいただく方法のガイダンスについては、Office VBA のサポートおよびフィードバックを参照してください。