日期:2014-05-16  浏览次数:20957 次

access vba向窗体传递参数

OpenForm(FormName, View, FilterName, WhereCondition, DataMode, WindowMode, OpenArgs)

表达式?? 一个代表 DoCmd 对象的变量。

参数

名称 必选/可选 数据类型 说明
FormName 必选 Variant 字符串表达式 (字符串表达式:任一求值为一列连续字符的表达式。表达式的元素可以是:返回字符串或字符串 Variant (VarType 8) 的函数;字符串字面值、常量、变量或 Variant。),表示当前数据库中窗体 (窗体:Access 数据库对象之一,可以在这种对象上放置控件,用于执行操作,或在字段中输入、显示、编辑数据。)的有效名称。如果在类库数据库 (类库数据库:可以从任意应用程序中调用的过程和数据库对象的集合。为了使用库中的项,必须先建立从当前数据库到类库数据库的引用。)中执行包含 OpenForm 方法的 Visual Basic 代码,则 Microsoft Access 将先在该类库数据库中查找具有此名称的窗体,然后再在当前数据库中查找。
View 可选 AcFormView AcFormView 常量,指定将在其中打开窗体的视图。默认值为 acNormal。
FilterName 可选 Variant 字符串表达式,表示当前数据库中的查询 (查询:有关表中所存储的数据的问题,或要对数据执行操作的请求。查询可以将多个表中的数据放在一起,以作为窗体或报表的数据源。)的有效名称。
WhereCondition 可选 Variant 字符串表达式,不包含 WHERE 关键字的有效 SQL WHERE 子句 (WHERE 子句:SQL 语句中用于指定哪部分记录被检索的语素。)。
DataMode 可选 AcFormOpenDataMode AcFormOpenDataMode 常量,指定窗体的数据输入模式。仅适用于在窗体视图或数据表视图中打开的窗体。默认值为 acFormPropertySettings。
WindowMode 可选 AcWindowMode AcWindowMode 常量,指定打开窗体时采用的窗口模式。默认值为 acWindowNormal。
OpenArgs 可选 Variant 字符串表达式。该表达式用于设置窗体的 OpenArgs 属性。然后可以通过代码在窗体模块 (窗体模块:一个模块,其中包含在特定窗体或其控件上所发生的事件触发的所有事件过程的 Visual Basic for Applications (VBA) 代码。)(如 Open 事件过程 (事件过程:自动执行的过程,以响应用户或程序代码启动的事件或系统触发的事件。))中使用该设置。还可以在宏 (宏:可用于自动执行任务的一项或一组操作。可用 Visual Basic for Applications 编程语言录制宏。)和表达式 (表达式:算术或逻辑运算符、常数、函数和字段名称、控件和属性的任意组合,计算结果为单个值。表达式可执行计算、操作字符或测试数据。)中引用 OpenArgs 属性。例如,假设您打开的窗体是包含客户的连续窗体 (连续窗体:在窗体视图中,能在屏幕上显示多条记录的窗体。)列表。如果您希望当窗体打开时焦点 (焦点:一种接受通过鼠标或键盘操作或 SetFocus 方法进行的用户输入的能力。焦点可由用户或由应用程序设置。具有焦点的对象通常由突出显示的标题或标题栏指示。)移到特定的客户记录上,可以使用 openargs 参数指定客户名称,然后使用 FindRecord 方法将焦点移到具有指定名称的客户的记录上。

传参数的方式是:

Sub OpenToCallahan()
    DoCmd.OpenForm "Employees", acNormal, , , acReadOnly, _
     , "Callahan"
End Sub

Sub Form_Open(Cancel As Integer)
    Dim strEmployeeName As String
    ' If OpenArgs property contains employee name, find
    ' corresponding employee record and display it on form. For
    ' example,if the OpenArgs property contains "Callahan",
    ' move to first "Callahan" record.
    strEmployeeName = Forms!Employees.OpenArgs
    If Len(strEmployeeName) > 0 Then
        DoCmd.GoToControl "LastName"
        DoCmd.FindRecord strEmployeeName, , True, , True, , True
    End If
End Sub