Vba MS Access从子窗体的组合框中选择下拉菜单后,在主窗体中填写ID

Vba MS Access从子窗体的组合框中选择下拉菜单后,在主窗体中填写ID,vba,ms-access,combobox,Vba,Ms Access,Combobox,我对此链接有类似的情况: 简而言之,当我在子表单中输入数据时,我希望能够在主表单中创建自动编号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"

我对此链接有类似的情况:

简而言之,当我在子表单中输入数据时,我希望能够在主表单中创建自动编号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”的附加字段,用于捕获主窗体中的更改。 如果我在子窗体中填写一个文本框,则此操作有效。但是,如果我从combobox中选择一个项目,它将不起作用

假设我的组合框是cboSelectItem,我也尝试将事件更改为“下”,但更改为“无可用”

Private Sub cboSelectItem_BeforeUpdate(Cancel As Integer)

是否仍要更改代码以运行组合框并保留下拉列表中的选择?

您可以截获子表单框架的
输入
事件,并检查“父”表单是否有活动记录。这样,在向“父”窗体添加新记录时,仍然可以强制执行父窗体和子窗体之间的关系

在主窗体上选择
子窗体框
对象(通常在其中选择
链接主字段\链接子字段
。fram应该有两个事件,
进入和退出时

使用Enter上的
事件检查“父”表单是否有任何记录。注意,您已经在父表单中,因此
父表单=当前表单

事件应如下所示:

'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

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

请Brian,不要让我阅读另一个线程来理解您的问题。相反,请修改您的问题以在此处进行充分解释,并添加有关您从何处复制代码的参考。Hi@Variatus已经包含了背景信息。你能在这方面提供帮助吗?
Sub Form\u Dirty
是子表单中的一个过程吗?它是如何命名的?你提到的Cbx从哪里来的?我不熟悉
IsNull(!MainFormID)
语法。因此,我会质疑感叹号的使用。您在
Me.Parent
中寻址
Description
Dirty
字段的语法对我来说很奇怪。如果这些是文本框,我希望设置值或文本属性。如果它们是标签,默认可能是标题。
Dirty
可能是复选框。我认为你应该指定你所指的属性。但是,不,对不起,我认为我没有资格帮助VBA进行访问。这个解决方案比另一个页面的解决方案好得多。非常感谢。它很有效。有了它,我不需要关心输入数据是在文本框还是组合框中。