【发布时间】:2014-07-29 20:24:19
【问题描述】:
关于我在这里发布的问题:
MS Access Form where user name is selected from list
我创建了一个用作员工时间表的表单。用户双击此表单,弹出另一个表单,他们从组合框中选择他们的用户名,主时间表表单专门为其用户名加载。他们可以添加新记录,还可以通过滚动“上一个”和“下一个”记录来查看他们以前提交的内容。
但是,当用户打开表单时,会显示他们的最后一条记录。此外,当保存新记录时,除非用户单击“新建(空白)记录”按钮,否则该新记录会继续显示。
有人可以帮我修改表单中的 VBA 代码以允许:
1) 打开表单时自动加载的空白记录
2) 保存/修改新记录时自动加载空白记录。
这是弹出窗口 - 当您选择主数据输入表单时弹出的表单:
这是弹出表单背后的代码(上图):
Private Sub Form_Current()
If VBA.Strings.Len(txtUN & "") = 0 Then DoCmd.OpenForm "frm_UserName", acNormal, , , , acDialog
If VBA.Strings.Len(txtUsername & "") = 0 Then txtUsername = txtUN
End Sub
Private Sub Form_BeforeUpdate(Cancel As Integer)
Dim ctl As Control
On Error GoTo Err_BeforeUpdate
If Me.Dirty Then
If MsgBox("Do you want to save?", vbYesNo + vbQuestion, _
"Save Record") = vbNo Then
Me.Undo
End If
End If
Exit_BeforeUpdate:
Exit Sub
Err_BeforeUpdate:
MsgBox Err.Number & " " & Err.Description
Resume Exit_BeforeUpdate
End Sub
这是主要的数据输入表单[Specialist - Timesheet Entry]:
这是 [Specialist - Timesheet Entry] 表单背后的代码:
Option Compare Database
Private Sub cboUserName_AfterUpdate()
Forms![Specialist - Timesheet Entry].txtUN = cbousername
Forms![Specialist - Timesheet Entry].Filter = "user_full_name = '" & cbousername & "'"
Forms![Specialist - Timesheet Entry].FilterOn = True
'Forms![Specialist - Timesheet Entry].Requery
'DoCmd.Close
End Sub
Private Sub Form_Unload(Cancel As Integer)
If (VBA.Strings.Len(cbousername & "") = 0) Then
MsgBox "You must supply a user name before proceeding.", , "ERROR: Missing Info."
Cancel = True
End If
End Sub
一旦选择了 [专家 - 时间表条目],就会弹出 [form_UserName]。您必须从列表中选择一个用户名,然后点击“X”按钮。选择“X”按钮后,将出现数据输入表单 [专家 - 时间表输入],供用户输入必要的字段。 我还希望用户不必点击“X”按钮即可启动 [专家 - 时间表条目] 表单。理想情况下,一旦用户从弹出窗口的下拉列表中选择用户名,我希望表单自动关闭并生成 [Specialist - Timesheet Entry] 表单。
【问题讨论】:
-
尝试
DoCmd.GoToRecord , , acNewRec获取新记录。把这个On Load放在那里,如果用户想保存记录,你还需要尝试把那个代码放在那里来处理Yes部分。我对 Me.Dirty 代码很怀疑。 -
@overmind 如果我添加建议的代码,我会收到运行时错误 2424。“您输入的表达式包含 MS Access 无法找到的字段、控件或属性名称。”如果我单击调试,此代码以红色突出显示
If VBA.Strings.Len(txtUsername & "") = 0 Then -
我也试过这个代码:
DoCmd.RunCommand acCmdRecordsGoToNew和它同样的问题。 -
@overmind 您在上面提供的代码与您在我问过的另一个问题中给我的代码相同,但由于某种原因,这种情况正在引发运行时间。
-
尝试调试它。
If VBA.Strings.Len(txtUsername & "") = 0 Then MsgBox("An erorr was caught") End If
标签: forms vba ms-access record