立即访问忘记 public 个值

Access forgetting public values now

访问 2016,VBA;我正在尝试声明一个 public 变量(用户的 window 登录),它在函数和 form_load

之间保留 "Forgetting" 变量

模块:

Option Compare Database

Public vUser As String

开始表格:

Public Function fnUserID() As String
    Set Wshnetwork = CreateObject("wscript.Network")
    fnUserID = Wshnetwork.UserName
End Function

Public Function SetUserID()
    vUser = fnUserID
End Function

Private Sub Form_Load()
    Call SetUserID
    txtBox.Value = vUser
End Sub

现在我在第二个 Access 数据库中有了这个确切的代码(相同的变量名等)。我错过了什么让这个不能正常工作?

Scope 是一件棘手的事情,尤其是当您不使用 Option Explicit 时。您应该始终使用显式声明,并在 VBA.

中所有模块的顶部使用 Option Explicit

您可以在该模块中显式引用全局范围 vUser,方法是调整您的代码以使用 ModuleName.vUser:

Public Function fnUserID() As String
    Set Wshnetwork = CreateObject("wscript.Network")
    fnUserID = Wshnetwork.UserName
End Function

Public Function SetUserID()
    Module1.vUser = fnUserID
End Function

Private Sub Form_Load()
    Call SetUserID
    txtBox.Value = Module1.vUser
End Sub

流行的替代品是:

  1. 使用 TempVar:TempVars.vUser。优点包括能够在查询、表单表达式和宏中引用 TempVar。
  2. 使用预先声明的 class。优点包括将身份验证代码与表单分开,并使其更容易扩展身份验证。

它在此处的测试中按原样工作,并且在您的其他形式中工作。

因此,重新创建违规表单。当前代码模块可能已损坏。