访问 VBA 双击 IF 创建新记录

Access VBA create new record on doubleclick IF

我目前有一个数据表表格,其中双击一条记录将打开该记录的另一个单一表格。

目前,在数据表表单中,用户可以通过向新记录行(即数据表底部带有星号的空白行)中的任何字段添加信息来创建新记录。这对现有记录完美无缺,但我遇到了用户在将任何数据输入任何新记录行字段之前双击该新记录行的问题。没有数据输入任何新记录行字段,从技术上讲还没有记录(由主键确认仍然显示“(新)”而不是数字)。因此,双击那个空白的新行会触发我的宏尝试为不存在的记录打开单一表单。

我目前使用的宏是:

     Private Sub Project_ID_DblClick(Cancel As Integer)
        DoCmd.RefreshRecord
        DoCmd.Save
        DoCmd.OpenForm "F_Project_Detail", , , "ProjectSerialNum = " & Me.ProjectSerialNum
     End Sub

ProjectSerialNum 是主键,它是一个自动编号。我设想的修复是一个 IF 语句,它表示如果数据表行中的所有文件都是空白的,则创建一个由下一个增量 ProjectSerialNum 标识的新记录。这个 IF 语句将出现在我的宏的最开头,为随后的“OpenForm”行提供一个 ProjectSerialNum 以进行交叉引用。但我不知道如何写这个,我不确定它是最好的方法。任何帮助将非常感激。谢谢!

您不需要检查表单当前记录中的每个字段是否为空来确定它是否是“新”记录。只需检查表格的 NewRecord 属性.1

并且当用户在新记录中双击 ProjectSerialNum 时,打开第二个窗体 (F_Project_Detail) 而无需提供 WhereCondition 选项,然后去那里的新记录2,或者在acFormAdd数据模式下打开它3.

打开 F_Project_Detail 然后转到其新记录将允许用户导航到现有记录。如果您不想允许,acFormAdd 数据模式方法将允许他们添加记录但不能访问现有记录。

Private Sub Project_ID_DblClick(Cancel As Integer)
    If Me.NewRecord = True Then
        DoCmd.OpenForm "F_Project_Detail"
        DoCmd.GoToRecord acDataForm, "F_Project_Detail", acNewRec
        'DoCmd.OpenForm "F_Project_Detail", DataMode:=acFormAdd ' if Add Mode preferred
    Else
        If Me.Dirty Then Me.Dirty = False
        DoCmd.OpenForm "F_Project_Detail", , , "ProjectSerialNum = " & Me.ProjectSerialNum
    End If
End Sub

文档:

  1. Form.NewRecord property
  2. DoCmd.GoToRecord method and AcRecord enumeration
  3. DoCmd.OpenForm method and AcFormOpenDataMode enumeration