Vba MS Access从子窗体的组合框中选择下拉菜单后,在主窗体中填写ID
我对此链接有类似的情况: 简而言之,当我在子表单中输入数据时,我希望能够在主表单中创建自动编号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"
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进行访问。这个解决方案比另一个页面的解决方案好得多。非常感谢。它很有效。有了它,我不需要关心输入数据是在文本框还是组合框中。