从列表中选择用户名的MS Access表单

时间:2014-07-28 19:48:34

标签: forms vba ms-access access-vba prompt

我将重新叙述我之前发布的一个问题:

我在访问中构建了一个表单,允许用户输入他们按活动工作的小时数(即交易处理,项目时间,休假等)。表单上的字段是:

1)用户名 2)开始日期 3)结束日期 4)活动 5)花费的时间

有没有办法让这个表单以这样的方式,当用户打开它时,会自动出现一个提示,强制您从用户列表中选择用户名?选择用户名后,通过此表单输入的所有记录都已填充用户名字段(除非表单已关闭并再次重新打开)?

根据提示中的用户名选择,使用" Previous Record"切换记录。和"下一个记录"箭头应严格适用于所选的用户名。

**这是我目前的表格**

enter image description here

用于制作下述解决方案的步骤

1)删除名为"用户名"
的组合框 2)添加一个未绑定的隐藏文本框,并将其命名为txUN
3)添加下面加载的VBA代码,但将txtusername引用更改为user_full_name,因为这是应存储这些记录的表中列的名称
4)使用用户名的组合框创建下面的表单,并将其命名为cbousername
5)将frm_sample引用更改为[Specialist - Timesheet Entry]

2 个答案:

答案 0 :(得分:3)

选项,首先打开用户名表单

使用名为txtUN

的隐藏文本框创建如下所示的表单

enter image description here

后面的代码如下:

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 

然后创建如下表单。将下拉列表命名为cboUserName

enter image description here

后面的代码如下:

Private Sub cboUserName_AfterUpdate()
   Forms!frm_Sample.txtUN = cboUserName
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

当您打开frm_Sample时,它会检查txtUN是否有值。如果不是,它将打开frm_UserName作为对话框。用户必须选择用户名并关闭表单。当txtUsername为空时导航到另一条记录时,会分配txtUN包含的任何内容。

答案 1 :(得分:-1)

您可以自动将实际的Windows用户名传递给表单,并通过表查找获得与应用程序相关的用户名。

可能你已经有一个表(比如表tblUsers,其中包含一个包含你的用户名的字段,例如fldUsername),你的数据库中存储了所有有效的用户名。只需在此表(名为fldDomainUser)中添加一列,其中包含域和/或登录用户的用户名。

Environ$("userdomain") + "\" + Environ$("username")

会在您的域名中返回一个字符串,' \'和你的实际用户名。

功能

dlookup ("[fldUsername]","[tblUsers]","[fldDomainUser]='"+cstr(Environ$("userdomain") + "\" + Environ$("username"))+"'")

将返回用户名。

在表格before_insert活动

中设置您的实际用户名
Private Sub Form_BeforeInsert(Cancel As Integer)
   [ctrlUsername] = Environ$("userdomain") + "\" + Environ$("username")
End Sub

以便所有新创建的记录自动包含您的用户名。

不要忘记相应地过滤您的表单或Recordsource