0

我想:

为了能够打开表单,请从控制框中选择一个项目,单击一个按钮以打开一个新表单,并能够输入将先前选择的项目添加到其字段中的新记录。

到目前为止我做了什么:

我制作了两种形式,在两者中都添加了控件,添加了一个命令按钮。我已使用 MS Access 向导添加此代码:

Private Sub CommandNext_Click()
  On Error GoTo Err_CommandNext_Click

    Dim stDocName As String
    Dim stLinkCriteria As String

    stDocName = "FormX"
    DoCmd.OpenForm stDocName, , , "[BatchID] = " & Me![ListBatch], acFormAdd

  Exit_CommandNext_Click:

    Exit Sub

  Err_CommandNext_Click:

    MsgBox Err.Description
    Resume Exit_CommandNext_Click

End Sub

第三行是我的。

因此:

  • 如果第二个表单尚未打开,按下第一个表单上的按钮将打开第二个表单,其中包含空数据(应显示参数值的文本字段为空)。
  • 如果第二个表单已经打开,按下第一个表单上的按钮会将焦点更改为第二个,它将显示与我选择的参数匹配的旧的现有记录
  • 我想打开第二个表单,但不显示任何旧记录,但所选参数出现在指定的文本字段中。

在第二种形式的这两种情况下,Filter属性都会填充我使用按钮发送的参数,但这不是我的目标。

4

1 回答 1

2

您是否知道 open form 命令的第四个参数是要应用的 where 条件或过滤器?

如果您使用最后一个称为开放参数 (OpenArgs) 的参数,那么您可以在 2nd forms open 事件中编写代码来设置相关列的默认值。

开放式表单代码如下所示:

DoCmd.OpenForm stDocName, , , , acFormAdd, , Me![ListBatch]

然后,您可以在此 2nd forms open 事件中放入类似于以下内容的代码:

Dim defaultID as Long
defaultID = CLng(Nz(Me.OpenArgs, 0))
If defaultID = 0 Or IsNull(Me.OpenArgs) Then
    Cancel = True
    Exit Sub
End If
Me.TextBoxBatchID.DefaultValue = defaultID

或者,如果您不需要为每条新记录设置 ID,您可以将控件的当前值设置为 defaultID 变量。

 Me.TextBoxBatchID = defaultID

请注意,如果 open 参数结果为空或 0,则上面的代码将不会打开表单。

于 2012-06-20T20:46:41.873 回答