现在访问忘记公共值

时间:2018-03-20 15:44:29

标签: access-vba global-variables ms-access-2016

访问2016,VBA;我试图声明一个公共变量(用户的窗口登录),它保持“忘记”函数和form_load之间的变量

模块:

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数据库中使用了这个确切的代码(相同的var名称等)。我错过了什么让这个不能正常工作?

2 个答案:

答案 0 :(得分:0)

范围是一件棘手的事情,特别是如果你没有使用RewriteEngine On RewriteCond %{REQUEST_URI} !^(.*)/cms/v1/pages/v1.01/ RewriteRule ^(.*)/(.*)$ $1/cms/v1/pages/v1.01/$2 [L] 。您应该始终使用显式声明,并在VBA中所有模块的顶部使用Option Explicit

您可以通过调整代码使用Option Explicit来明确引用该模块中的全局范围vUser

ModuleName.vUser

流行的替代方案是:

  1. 使用TempVar: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。
  2. 使用预先声明的类。优点包括将身份验证代码与表单分离,以及更容易扩展身份验证。

答案 1 :(得分:0)

在这里的测试中,它确实 ,并且它以其他形式工作。

所以,重新制作有问题的表格。不知何故,当前的代码模块可能已损坏。