Just FYI, the OpenForm method can take a Filter or a Where condition. I always use Where to limit the rows returned. Both will show a filter value but if you use the Filter option, the entire recordset will be populated but the form will be positioned on the selected record. If you use the Where option, Access actually temporarily modifies the where clause to select only the single record. If the form you open has a navigation bar, you can see the difference there. In the Where case, you will see record 1 of 1 but in the Filter case, you will see record 1 of n.
So. These two statements produce DIFFERENT results as you would expect.
Private Sub cmdFilter_Click()
DoCmd.OpenForm "frmPeople", acNormal, "PersonID = " & Me.cboPersonID
End Sub
Private Sub cmdWhere_Click()
DoCmd.OpenForm "frmPeople", acNormal, , "PersonID = " & Me.cboPersonID
End Sub
DoCmd.OpenForm method (Access)
The
OpenForm method carries out the OpenForm action in Visual Basic.
Syntax
expression.
OpenForm (
FormName,
View,
FilterName,
WhereCondition,
DataMode,
WindowMode,
OpenArgs)
expression A variable that represents a
DoCmd object.
Parameters
PARAMETERS
Name | Required/Optional | Data type | Description |
---|
FormName | Required | Variant | A string expression that's the valid name of a form in the current database. If you execute Visual Basic code containing the OpenForm method in a library database, Access looks for the form with this name first in the library database, and then in the current database. |
View | Optional | AcFormView | An AcFormView constant that specifies the view in which the form will open. The default value is acNormal. |
FilterName | Optional | Variant | A string expression that's the valid name of a query in the current database. |
WhereCondition | Optional | Variant | A string expression that's a valid SQL WHERE clause without the word WHERE. |
DataMode | Optional | AcFormOpenDataMode | An AcFormOpenDataMode constant that specifies the data entry mode for the form. This applies only to forms opened in Form view or Datasheet view. The default value is acFormPropertySettings. |
WindowMode | Optional | AcWindowMode | An AcWindowMode constant that specifies the window mode in which the form opens. The default value is acWindowNormal. |
OpenArgs | Optional | Variant | A string expression. This expression is used to set the form's OpenArgs property. This setting can then be used by code in a form module, such as the Open event procedure. The OpenArgs property can also be referred to in macros and expressions.
For example, suppose that the form that you open is a continuous-form list of clients. If you want the focus to move to a specific client record when the form opens, you can specify the client name with the OpenArgs argument, and then use the FindRecord method to move the focus to the record for the client with the specified name. |
Remarks
You can use the
OpenForm method to open a form in Form view, form Design view, Print Preview, or Datasheet view. You can select data entry and window modes for the form and restrict the records that the form displays.
The maximum length of the
WhereCondition argument is 32,768 characters (unlike the
WhereCondition action argument in the Macro window, whose maximum length is 256 characters).
Example
The following example opens the
Employees form in Form view and displays only records with King in the
LastName field. The displayed records can be edited, and new records can be added.
VBCopy
DoCmd.OpenForm "Employees", , ,"LastName = 'King'"
The following example opens the
frmMainEmployees form in Form view and displays only records that apply to the department chosen in the
cboDept combo box. The displayed records can be edited, and new records can be added.
VBCopy
Private Sub cmdFilter_Click()
DoCmd.OpenForm "frmMainEmployees", , , "DepartmentID=" & cboDept.Value
End Sub
The following example shows how to use the
WhereCondition argument of the
OpenForm method to filter the records displayed on a form as it is opened.
VBCopy
Private Sub cmdShowOrders_Click()
If Not Me.NewRecord Then
DoCmd.OpenForm "frmOrder", _
WhereCondition:="CustomerID=" & Me.txtCustomerID
End If
End Sub