从子表单的组合框中选择下拉菜单后,MS Access 在主表单中填写 ID
Posted
技术标签:
【中文标题】从子表单的组合框中选择下拉菜单后,MS Access 在主表单中填写 ID【英文标题】:MS Access Fill in ID in the Main Form after select drop down from combo box in Subform 【发布时间】:2020-03-17 08:10:50 【问题描述】:这个链接我也有类似的情况: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 代码并创建名为“描述”的附加字段,用于捕获主窗体中的更改。 如果我在子表单中填写文本框,这将有效。但是,如果我从组合框中选择一个项目,它将不起作用。
假设我的组合框是 cboSelectItem,我也尝试将事件更改为以下但不可用。
Private Sub cboSelectItem_BeforeUpdate(Cancel As Integer)
无论如何更改代码以便能够为组合框运行并且仍然保留我从下拉列表中的选择?
【问题讨论】:
拜托,布赖恩,为了理解你的问题,请不要让我阅读另一个帖子。相反,修改您的问题以在此处进行全面解释,并添加有关您从何处复制代码的参考。 嗨@Variatus 已包含背景信息。你能帮忙吗?Sub Form_Dirty
是子窗体中的过程吗?它是怎么称呼的?你提到的 Cbx 是从哪里来的?我不熟悉IsNull(!MainFormID)
语法。所以,我会质疑感叹号的使用。您在Me.Parent
中寻址Description
和Dirty
字段的语法对我来说看起来很奇怪。如果这些是 TextBoxes,我希望设置 Value 或 Text 属性。如果它们是标签,则默认值可能是 Caption。 Dirty
可以是一个复选框。我认为您应该指定您所指的属性。但是不,抱歉,我认为我没有资格协助 VBA for Access。
【参考方案1】:
可以拦截sub form frame
的On Enter
事件,检查“父”表单是否有活动记录。这样,在向“父”表单添加新记录时,您仍然可以确保父表单和子表单之间的关系。
在主窗体上选择Sub form frame
对象(您通常选择link master fields \ link child fields
。该框架应该有两个事件,On Enter & On Exit
。
使用On Enter
事件检查“父”表单是否有任何记录。 注意,您已经在父表单中,所以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
当您输入子表单并且父表单没有记录时,这应该可以工作。这样做是否好由您自己决定。
【讨论】:
这个解决方案比其他页面的解决方案要好得多。非常感谢。有用。有了这个,我不需要关心输入数据是在文本框还是组合框中。以上是关于从子表单的组合框中选择下拉菜单后,MS Access 在主表单中填写 ID的主要内容,如果未能解决你的问题,请参考以下文章
MS Access 07-10,希望能够将字段放入列表/组合框中
通过在列表下拉组合框中选择它来访问 VBA 代码以转到另一个表单上的特定记录