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

如何在私有模块中创建公共变量?Access登录表单ID跨表单调用报错求助

问题一:如何在私有模块中创建公共变量?

首先得明确你说的「私有模块」具体是哪种场景:

  • 如果是表单/报表这类类模块(它们默认是私有作用域的模块),要创建公共变量超简单——直接在模块的通用声明段用 Public 关键字声明就行,比如:
    Option Compare Database
    Option Explicit
    
    ' 这个变量属于当前表单实例,只要表单打开就能访问
    Public MyPublicVar As String
    
    但要注意:这种变量是依附于表单实例的,只有当表单处于打开状态时,你才能通过表单名称访问它,比如 Forms!你的表单名.MyPublicVar;表单一关,变量就跟着销毁了。
  • 如果是标准模块(就是你插入的普通模块),要是想让变量只在这个模块内部能用,就用 Private 声明(这才是标准模块里的「私有变量」);要是想让变量全局可用,还是用 Public 声明就行。
问题二:登录表单保存ID后,其他表单调用出错的问题

看你的代码,核心问题出在你把登录表单关闭了!你在登录成功后执行了 DoCmd.Close acForm, Me.Name,这会直接销毁登录表单的实例——而你声明的 Public ID_ As String 是属于这个表单实例的变量,表单一关,这个变量就不存在了,其他表单自然调用不到。

给你几个实用的解决办法,按推荐程度排序:

方法1:用全局变量(标准模块)

创建一个新的标准模块(菜单栏选「插入」→「模块」),在里面声明全局变量:

Option Compare Database
Option Explicit

' 全局存储登录用户ID,整个数据库都能访问
Public g_LoginUserID As String

然后回到登录表单的代码,把ID赋值给这个全局变量,不用管登录表单关不关闭:

Private Sub Command4_Click()
    Dim strCBOPass As String
    Dim strPassword As String
    strCBOPass = Me.CBOUsername.Column(1)
    strPassword = Me.txtpassword
    
    If strCBOPass = strPassword Then
        MsgBox "Login Successful!"
        ' 把选中的用户ID赋值给全局变量
        g_LoginUserID = Me.CBOUsername.Column(0)
        DoCmd.OpenForm "Form1"
        DoCmd.Close acForm, Me.Name
    Else
        MsgBox "用户名或密码错误!"
    End If
End Sub

之后在Form1里直接用 g_LoginUserID 就能拿到这个ID了。

方法2:打开Form1时直接传递ID参数

不用依赖变量,直接在打开Form1的时候把ID传过去,这种方法更安全,不会有全局变量的污染问题:
修改登录表单里打开Form1的代码:

' 最后一个参数就是要传递的ID
DoCmd.OpenForm "Form1", , , , , acDialog, Me.CBOUsername.Column(0)

然后在Form1的 Form_Load 事件里接收这个参数:

Private Sub Form_Load()
    Dim loginID As String
    ' 获取传递过来的ID参数
    loginID = Me.OpenArgs
    ' 这里就可以用这个ID做你需要的操作了,比如显示或者存起来
    MsgBox "当前登录用户ID:" & loginID
End Sub

方法3:隐藏登录表单(不推荐)

要是你坚持想用表单的公共变量,可以把关闭表单改成隐藏:

' 把DoCmd.Close换成Me.Hide
Me.Hide
DoCmd.OpenForm "Form1"

之后在Form1里通过 Forms!你的登录表单名称.ID_ 来访问这个变量。但这种方法不太好,因为登录表单会一直留在内存里,容易出现意外问题,不推荐。

另外还要检查下你的代码里 ID_ = Me.CBOUsername.Column... 是不是没写完?记得要完整写成 ID_ = Me.CBOUsername.Column(0) 哦,这个小细节别漏了。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 10:31:21