全局变量失去其价值

App*_*Pie 8 ms-access vba ms-access-2000

在我正在处理的这个Access表单上,我有一个全局变量,它从Form_Load事件的另一个表单中获取其值.由于某些原因我不知道变量"失去它的值"(变成="")经过一段时间后或某些事件发生.我无法注意到触发此行为的任何特定内容.在表单上"不活动"一段时间后,全局变量是否重置?

以下是我设置我正在讨论的全局变量的方法:

Private Sub Form_Load()       
    '...
    Set prev_form = Form_Identification.Form
    PasswordSybase = prev_form.Password.Value & vbNullString
    UserSybase = prev_form.UserID.Value & vbNullString
    '...
End Sub
Run Code Online (Sandbox Code Playgroud)

ash*_*eef 8

我开始使用的替代解决方案(仅2007年及以后)是TempVars奇怪的情况下的全局变量而不是全局变量.它是一个集合,它会在应用程序持续时间内持续存在,除非您明确发布它.因此,在某些情况下,我觉得它比全局变量更有用,在某些情况下更糟糕.

TempVars.Add myVarName, myVarValue ' To initialize
TempVars.Item(myVarName) = newVarValue ' To reference and assign a new value
TempVars.Remove(myVarName) ' To release
Run Code Online (Sandbox Code Playgroud)

快速搜索应该向您显示更多批次参考,但我已经包含了基本链接的链接

http://blogs.office.com/b/microsoft-access/archive/2010/09/27/power-tip-maximize-the-user-of-tempvars-in-access-2007-and-2010.aspx

  • 我赞成但不能接受因为我必须使用Access 2000(抱歉我之前没有指定).但是对于2007+的答案很棒.我一定会记住这一点. (3认同)

Joh*_*eph 6

我希望访客看到这篇文章,因为它提供了一个重要的附加部分.

即使您全局声明一个变量,看起来 - 如果您在表单模块中设置该变量的值 - 当您卸载表单时该值将丢失.

解决方案(在我的情况下)就像更换一样简单:

卸下我

...与...

Me.Hide

然后,我在该代码模块中设置的变量(和对象)在应用程序实例的整个生命周期中保留其值.


Joh*_*nes 0

我在该声明中没有看到任何内容告诉我它是一个全局变量。您可以在模块中的所有子/函数上方和选项比较语句下方设置全局变量,方法是:

PUBLIC X as string
Run Code Online (Sandbox Code Playgroud)

任何其他变量只有在子或函数完成之前才有效。

此外,全局变量必须在适当的模块上声明。您不能在表单的模块上声明它们。