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)
我开始使用的替代解决方案(仅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)
快速搜索应该向您显示更多批次参考,但我已经包含了基本链接的链接
我希望访客看到这篇文章,因为它提供了一个重要的附加部分.
即使您全局声明一个变量,看起来 - 如果您在表单模块中设置该变量的值 - 当您卸载表单时该值将丢失.
解决方案(在我的情况下)就像更换一样简单:
卸下我
...与...
Me.Hide
然后,我在该代码模块中设置的变量(和对象)在应用程序实例的整个生命周期中保留其值.
我在该声明中没有看到任何内容告诉我它是一个全局变量。您可以在模块中的所有子/函数上方和选项比较语句下方设置全局变量,方法是:
PUBLIC X as string
Run Code Online (Sandbox Code Playgroud)
任何其他变量只有在子或函数完成之前才有效。
此外,全局变量必须在适当的模块上声明。您不能在表单的模块上声明它们。