在窗体已打开,但第一条记录尚未显示时,Open 事件发生。对于报表,事件发生在报表被预览或被打印之前。
Private Sub object_Open(Cancel As Integer)
Object 窗体或报表的名称。
Cancel 该设置确定是否打开窗体或报表。将 Cancel 参数设为 True (–1) 可取消打开窗体或报表。
若要在该事件发生时运行宏或事件过程,请将 OnOpen 属性设置为宏的名称或 [事件过程]。
在窗体的 Open 事件发生时,通过运行宏或事件过程可以关闭另一个窗口,或者将焦点移到窗体中某一特定的控件上。也可以运行宏或事件过程,在窗体或报表被打开或打印之前询问所需信息。例如,Open 宏或事件过程可以打开一个用于输入条件以限制窗体上显示的记录集或报表中包含的数据范围的自定义对话框。
当激活一个已打开的窗体时,Open 事件不会发生。例如,当在本窗口以及 Microsoft Access 中的另一个窗口之间来回切换,或使用宏中的 OpenForm 操作将已打开的窗体置于最上面时,Open 事件不会发生。但是,下列情况下,Activate 事件发生。
当打开基于基础查询的窗体时,Microsoft Access 在运行 Open 宏或事件过程之前将运行窗体的基础查询。但在打开基于该基础查询的报表时,Microsoft Access 在运行 Open 宏或事件过程之后才运行报表的基础查询,后者是为了使用户能在报表打开之前指定报表的条件,例如,当 Open 事件发生时,可显示一个自定义对话框对条件进行指定。
如果应用程序能够同时加载多个窗体,请用 Activate 和 Deactivate 事件代替 Open 事件,以便焦点移动到不同窗体时显示和隐藏自定义工具栏。
Open 事件发生在 Load 事件之前,在窗体打开并显示其记录时触发该事件。
首次打开窗体时,下列事件将按如下顺序发生:
Open → Load → Resize → Activate → Current
Close 事件发生在 Unload 事件之后。在窗体关闭之后但在从屏幕上删除之前触发该事件。
Unload → Deactivate → Close
当 Close 事件发生时,可以打开另一个窗口或要求输入用户名称来产生日志记录项,以标明使用该窗体或报表的用户。
如果想确定在宏或事件过程使用 Open 事件还是使用 Load 事件,则请注意这两者间的一个显著差别:Open 事件能被取消,而 Load 事件不能被取消。例如,如果在一个事件过程中为窗体的 Open 事件动态创建窗体的记录源,如果没有记录可显示,则可以取消窗体的打开操作。同样,Unload 事件也能被取消,但 Close 事件却不能。
可以在 Open 宏中使用 CancelEvent 操作来取消打开窗体或报表的操作。不能在 Close 宏中使用 CancelEvent 操作取消 Close 事件。但可以在窗体发生 Unload 事件时所运行的宏中使用 CancelEvent 操作。
如果要在 Open 宏中引用控件,则必须先将焦点移到适当的控件或记录上。例如,若要在 Open 宏中使用 SetValue 操作来为窗体上的控件设置值,必须使用 GoToControl 或 GoToRecord 操作访问该控件或访问包含该控件的记录。
下面的示例用于显示在用户单击“否”按钮时,如何取消窗体的打开操作。消息框提示用户输入订单的详细信息。如果用户单击“否”,则“订单明细”窗体将不打开。
若要试用该示例,请将下列事件过程添加到窗体中。
Private Sub Form_Open(Cancel As Integer)
Dim intReturn As Integer
intReturn = MsgBox("Enter order details now?", vbYesNo)
Select Case intReturn
Case vbYes
' Open Order Details form.
DoCmd.OpenForm "Order Details"
Case vbNo
MsgBox "Remember to enter order details by 5 P.M."
Cancel = True ' Cancel Open event.
End Select
End Sub