关于我在这里发布的问题:
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]表单背后的代码:
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"按钮以启动[专家 - 时间表输入]表单。理想情况下,一旦用户从弹出窗口的下拉列表中选择用户名,我希望表单自动关闭并生成[专家 - 时间表条目]表单。
答案 0 :(得分:2)
我想我在这里有一些东西。
我和OverMind有同样的看法 - 我对Me.Dirty代码感到不满。我不认为这是必要的。您只需单击下拉列表,选择一个名称并打开使用所选名称过滤的表单。 Form_BeforeUpdate事件也是如此。您实际上并没有修改任何数据,只需单击并选择即可。我建议删除这两个事件。
如果你不介意的话,我稍微改了一下,因为我没有把整个应用程序放在我面前。尝试以下(有几个部分):
1。)frm_UserName
在cboUserName_AfterUpdate
事件中评论您现有的代码并添加以下行:
DoCmd.OpenForm "Specialist - Timesheet Entry"
'Open the main timesheet form and set the filter based on the dropdown selection in the previous form.
Forms![Specialist - Timesheet Entry].Filter = "Username = '" & Forms![frm_UserName].cboUserName.Column(1) & "'"
'Turn the filter on.
Forms![Specialist - Timesheet Entry].FilterOn = True
'Set the username textbox to the selected record.
Forms![Specialist - Timesheet Entry].txtUN = Me.cboUserName.Column(1)
'Jump to a new record even though the form is filtered.
Forms![Specialist - Timesheet Entry].SetFocus
DoCmd.GoToRecord , , acNewRec
'Close the previous form - we no longer need it.
DoCmd.Close acForm, "frm_UserName"
这将打开Timesheet - Specialist Entry
来自frm_UserName
表单“,在Timesheet
表单打开时自动加载[空白记录]”使用选择作为过滤器。
2。)专家 - 时间表条目
在Form Open事件中创建一个新过程并添加以下代码:
Private Sub Form_Open(Cancel As Integer)
DoCmd.OpenForm "frm_UserName", acNormal, , , , acDialog
End Sub
接下来,在“保存”按钮Click
事件中创建一个新过程并添加以下代码:
Private Sub cmdSave_Click()
'Save the record.
RunCommand acCmdSaveRecord
'Load a new record after the save.
DoCmd.GoToRecord , , acNewRec
End Sub
当保存/修改新记录时,这将自动加载空白记录。
我希望这会有所帮助。如果您有任何疑问,请告诉我。我很乐意进一步提供帮助。我也有一份工作副本......