立即访问忘记 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
流行的替代品是:
- 使用 TempVar:
TempVars.vUser
。优点包括能够在查询、表单表达式和宏中引用 TempVar。
- 使用预先声明的 class。优点包括将身份验证代码与表单分开,并使其更容易扩展身份验证。
它在此处的测试中按原样工作,并且在您的其他形式中工作。
因此,重新创建违规表单。当前代码模块可能已损坏。
访问 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
流行的替代品是:
- 使用 TempVar:
TempVars.vUser
。优点包括能够在查询、表单表达式和宏中引用 TempVar。 - 使用预先声明的 class。优点包括将身份验证代码与表单分开,并使其更容易扩展身份验证。
它在此处的测试中按原样工作,并且在您的其他形式中工作。
因此,重新创建违规表单。当前代码模块可能已损坏。