You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用DLookUp函数?该函数能否实现登录表单显示用户合同工时?

解决Access表单自动加载用户合同工时的问题

首先说下你之前踩的两个小坑:一是选错了触发事件,Before Update是表单数据要更新时才会触发,表单刚打开加载时根本不会触发这个事件;二是DLookup的条件写得不对,你引用了表的字段[tblUser]![UserLogin],但其实应该用表单上已经显示用户名的那个文本框的值来做匹配。

下面给你两种可行的解决方法,选哪种看你的使用习惯:

方法一:用VBA事件过程(推荐,更灵活)

  1. 打开表单的设计视图,右键表单空白处选择「属性」打开属性窗口
  2. 切换到「事件」选项卡,找到「加载」(On Load)或者「当前」(On Current)事件——前者是表单打开时触发一次,后者是每次切换记录时都会触发,根据你的需求选择
  3. 点击事件旁边的省略号(...),打开VBA编辑器
  4. 粘贴下面的代码(记得把文本框名称改成你实际用的!):
Private Sub Form_Load()
    ' 替换成你表单上显示用户名的文本框名称,比如txtUsername
    Dim userName As String
    userName = Me.txtUsername.Value
    
    ' 替换成你要显示合同工时的文本框名称,比如txtContractedHours
    Dim result As Variant
    result = DLookup("[ContractedHours]", "tblUser", "[Operator] = '" & userName & "'")
    
    ' 处理找不到匹配数据的情况,避免显示错误值
    If Not IsNull(result) Then
        Me.txtContractedHours = result
    Else
        Me.txtContractedHours = "" ' 或者写"无匹配数据",看你需求调整
    End If
End Sub

注意:如果你的Operator字段是数字类型(不是文本),把条件里的单引号去掉,改成"[Operator] = " & userName即可。

方法二:直接设置文本框的控件来源

如果你不想写VBA,也可以直接给显示工时的文本框设置控件来源:

  1. 在设计视图里选中要显示工时的文本框,打开它的属性窗口
  2. 切换到「数据」选项卡,在「控件来源」里输入:
    =DLookUp("[ContractedHours]","tblUser","[Operator] = '" & [你的用户名文本框名称] & "'")
    比如你的用户名文本框叫txtUserLogin,那就是:
    =DLookUp("[ContractedHours]","tblUser","[Operator] = '" & [txtUserLogin] & "'")
    同样,如果Operator是数字类型,去掉单引号就行。

这样表单打开的时候,就能自动根据显示的用户名加载对应的合同工时啦~

内容的提问来源于stack exchange,提问作者Ollie Sharratt

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 07:30:20