MS Access 在子窗体的组合框中 select 下拉后在主窗体中填写 ID

MS Access Fill in ID in the Main Form after select drop down from combo box in Subform

我也有类似的情况link:MS Access automatically fill id in main form when data is entered in subform

简而言之,我希望在子窗体中输入数据时能够在主窗体中创建自动编号 ID。这可以在子表单中使用此代码:

Private Sub Form_Dirty(Cancel As Integer)
With Me.Parent
    If IsNull(!MainFormID) Then
        ' Change any field to create the parent record
        .Description = "Test"
        ' Save changes on the parent form.
        .Dirty = False
    End If
End With
End Sub

我粘贴了 VBA 代码并创建了名为 "Description" 的附加字段,用于捕获主表单中的更改。 如果我在子表单中填写文本框,这会起作用。但是,如果我 select 来自组合框的项目它不起作用。

假设我的组合框是 cboSelectItem,我也尝试将事件更改为以下但不可用。

Private Sub cboSelectItem_BeforeUpdate(Cancel As Integer)

是否可以更改代码以便能够 运行 组合框并仍然保留我的 selection 从下拉列表中?

可以拦截sub form frameOn Enter事件,查看"parent"表单是否有活动记录。这样,在向"parent"窗体添加新记录时,仍然可以保证父窗体与子窗体的关系。

在主窗体 select 上 Sub form frame 对象(通常 select link master fields \ link child fields。那个框架应该有两个事件,On Enter & On Exit

使用On Enter事件检查"parent"表单是否有记录。 请注意,您已经在父表单中,因此 parent form = current form

活动应如下所示:

'This code should appear in the parent form's code page
Private Sub SubFormName_Enter()
    On Error Resume Next
    If (Me.NewRecord) Then

        Me!Description = "test"
        Me.Dirty       = False
    End If
End Sub

当您输入子表单并且父表单没有记录时,这应该有效。如果这样做是个好主意,则由您决定。