Vba 全局变量失去其值

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

在我正在处理的这个访问表单上,我有一个全局变量,它从另一个表单的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

我看不出那句话告诉我它是一个全局变量。您可以在模块中的所有子/函数上方和选项比较语句下方设置全局变量,方法是:

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。省略Dim
Global
是VB早期版本的遗留版本,并被
Public
取代。尽管如此,它仍然接受它(如果您以小写形式键入,则将G大写),但如果您点击该单词并按F1键,它会将您带到
公共声明的帮助中。
。我投了赞成票,但无法接受,因为我必须使用Access 2000(很抱歉,我之前没有指定此选项)。不过,对于2007+来说,这是一个很好的答案。我一定会记住这一点。旧帖子但仍然有用,tempvar也会在应用程序后保留。退出(所有卸载事件:D)但在完成关闭之前,Globals不会。感谢这一点-我一直在测试期间手动关闭我的主窗体(这是普通用户无法做到的)我想知道为什么我的全局变量一直不稳定。我们会更加小心的!