表单字段权限控制问题:仅允许主管级用户更新已填写字段
问题分析与修正方案
原代码核心问题
- 代码结构错误:内层
If DLookup(...)语句缺少对应的End If,导致逻辑分支混乱,主管权限判断的代码无法正确执行,这是主管无法解锁字段的直接原因。 - 触发事件不合理:仅用
Click事件只能在用户点击字段时触发逻辑,当表单切换记录、字段值被其他方式填充后,无法自动更新锁定状态。 - 逻辑嵌套冗余:原代码的条件嵌套容易引发分支错误,可简化为更直观的判断逻辑。
修正后的代码
建议同时使用GotFocus(字段获得焦点时)和Form_Current(切换记录时)事件,确保权限规则在所有场景下生效:
字段焦点触发逻辑
Private Sub DateStarted_GotFocus() Dim isSupervisor As Boolean isSupervisor = DLookup("TFSupervisor", "qrySplashUserCheck") = True If IsNull(Me.DateStarted) Then '字段为空,所有用户可编辑 Me.DateStarted.Locked = False Else '字段已填写,仅主管可编辑 Me.DateStarted.Locked = Not isSupervisor End If End Sub
记录切换触发逻辑
Private Sub Form_Current() Dim isSupervisor As Boolean isSupervisor = DLookup("TFSupervisor", "qrySplashUserCheck") = True If IsNull(Me.DateStarted) Then Me.DateStarted.Locked = False Else Me.DateStarted.Locked = Not isSupervisor End If End Sub
简化逻辑说明
直接通过两个条件组合判断锁定状态:
- 当字段为空时,无条件解锁,所有用户可填写。
- 当字段已填写时,根据用户是否为主管决定是否解锁:主管解锁,普通用户锁定。
内容的提问来源于stack exchange,提问作者Edufritsch
相关产品推荐
相关产品推荐

