Vba 全局变量失去其值
在我正在处理的这个访问表单上,我有一个全局变量,它从另一个表单的form_Load事件中获取它的值。由于我不知道的原因,变量在经过一段时间或某个事件发生后“失去其值”(变为=“”)。我没有注意到任何特别的触发这种行为的东西。在窗体上“不活动”一段时间后是否重置全局变量 下面是我设置全局变量的方法:Vba 全局变量失去其值,vba,ms-access,ms-access-2000,Vba,Ms Access,Ms Access 2000,在我正在处理的这个访问表单上,我有一个全局变量,它从另一个表单的form_Load事件中获取它的值。由于我不知道的原因,变量在经过一段时间或某个事件发生后“失去其值”(变为=“”)。我没有注意到任何特别的触发这种行为的东西。在窗体上“不活动”一段时间后是否重置全局变量 下面是我设置全局变量的方法: Private Sub Form_Load() '... Set prev_form = Form_Identification.Form PasswordSyb
Private Sub Form_Load()
'...
Set prev_form = Form_Identification.Form
PasswordSybase = prev_form.Password.Value & vbNullString
UserSybase = prev_form.UserID.Value & vbNullString
'...
End Sub
我看不出那句话告诉我它是一个全局变量。您可以在模块中的所有子/函数上方和选项比较语句下方设置全局变量,方法是:
PUBLIC X as string
任何其他变量只有在子变量或函数完成后才有效
此外,必须在适当的模块上声明全局变量。您不能在表单的模块中声明它们。我开始使用的另一种解决方案(仅2007年及以后)是TempVars
,而不是globals,因为我“需要”全局的东西。它是一个集合,除非您显式地释放它,否则它将在应用程序期间持续存在。所以在某些情况下,我觉得它比globals更有用,在某些情况下更糟糕
TempVars.Add myVarName, myVarValue ' To initialize
TempVars.Item(myVarName) = newVarValue ' To reference and assign a new value
TempVars.Remove(myVarName) ' To release
快速搜索应该会显示更多的参考资料,但我已经包含了一个基本参考资料的链接
您可以通过
- 创建表单(例如名为frmGlobal)
- 确保窗体始终处于打开状态但处于隐藏状态
- 为所需的每个全局变量(例如tVar1)创建一个文本框
- 在您的代码中,引用为例如Form_frmGlobal.tVar1
- 在代码中,当引用全局变量时,显式地将文本框转换为数据类型 e、 g Clng(表格1)
- 另一个选项是创建一个单行表,并将隐藏表单上的文本框绑定到该表,以便强制执行数据类型
JuanSoto解释了如何使用本地表来保存变量,以及如何在需要时调用它们。它可能在2000年达到你的目的,因为TempVars不是一个选项。您可以随时删除数据库中的变量“on close”,这样就不会保留UID和PWD。我希望访问者能看到这篇文章,因为它提供了一个重要的附加部分 即使全局声明变量,在表单模块中设置该变量的值时,卸载表单时该值也会丢失 解决方案(就我而言)非常简单,只需更换: 卸下我 …与 我,藏起来
然后,我在该代码模块中设置的变量(和对象)在应用程序实例的整个生命周期中保留其值。该“全局”关键字似乎不存在。我把它放在顶部,并这样声明:
Dim PasswordSybase as String
Try PUBLIC PasswordSybase as String。省略DimGlobal
是VB早期版本的遗留版本,并被Public
取代。尽管如此,它仍然接受它(如果您以小写形式键入,则将G大写),但如果您点击该单词并按F1键,它会将您带到公共声明的帮助中。
。我投了赞成票,但无法接受,因为我必须使用Access 2000(很抱歉,我之前没有指定此选项)。不过,对于2007+来说,这是一个很好的答案。我一定会记住这一点。旧帖子但仍然有用,tempvar也会在应用程序后保留。退出(所有卸载事件:D)但在完成关闭之前,Globals不会。感谢这一点-我一直在测试期间手动关闭我的主窗体(这是普通用户无法做到的)我想知道为什么我的全局变量一直不稳定。我们会更加小心的!