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

Access数据库:函数结果对比列表框值启动表单及错误438排查

嘿,我来帮你排查这个运行时错误438的问题——看了你的代码,问题主要出在列表框控件的引用方式上,还有几个小细节需要调整:

1. 错误根源:重复引用列表框控件

你已经把Forms!Users_Form!lst_Users赋值给了变量c,这意味着c本身就代表那个列表框控件。但后续循环里你又写了c.lst_Users.ListCount和c.lst_Users.Column(0, i),这就相当于在列表框对象里再找一个叫lst_Users的属性,而列表框根本没有这个属性,直接触发了“对象不支持该属性或方法”的438错误。

2. 修复后的完整代码

我帮你调整了代码逻辑,还加了几个优化点(比如找到匹配后提前退出循环、初始化验证状态),修复后的代码如下:

Function UserCompare()
    Dim c As Control
    Dim i As Integer
    Dim y As Boolean
    
    ' 打开用户列表表单(去掉括号更符合VBA常规写法)
    DoCmd.OpenForm "Users_Form"
    ' 直接引用列表框控件
    Set c = Forms!Users_Form!lst_Users
    
    ' 初始化验证状态为未授权,避免未进入循环时y保持Empty状态
    y = False
    ' 遍历列表框查找匹配的用户名
    For i = 0 To c.ListCount - 1
        If c.Column(0, i) = ThisUserName() Then
            y = True
            ' 找到匹配项后立即退出循环,提升运行效率
            Exit For
        End If
    Next i
    
    ' 根据验证结果打开对应表单
    If y = True Then
        DoCmd.OpenForm "Login Screen - Authorised"
    Else
        DoCmd.OpenForm "Login Screen - Unauthorised"
    End If
    
    ' 关闭用户列表表单,不保存更改
    DoCmd.Close acForm, "Users_Form", acSaveNo
End Function

3. 额外注意事项

  • 请确保ThisUserName()函数能正确返回从advapi32.dll获取的Windows用户名,如果这个函数本身有问题,也会导致验证逻辑失效。
  • 建议给Users_Form设置为弹出式且独占(在表单属性里调整),避免打开时被其他窗口遮挡,导致控件引用失败。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 04:17:53