全局变量丢失

时间:2015-04-27 09:46:48

标签: vba ms-access access-vba

我有一个全局变量,它只是一个字符串。我通过AutoExec打开Access时设置它。此变量基于bool是true还是false,它也是全局变量。

设置全局变量很好。但是我有一个错误,这意味着我需要停止我的代码并再次启动它来修复它。然后,这会导致全局变量设置为空。

这是正常行为吗?我刚才注意到它丢失的地方。但是,这意味着如果出现任何错误,我需要停止我的代码来修复它。每次都会迷路。并需要关闭并再次打开它。

无论如何都要保持设置直到我只关闭Access?

4 个答案:

答案 0 :(得分:4)

听起来像TempVars有你想要的行为。

这些内置于Access 2007及更高版本。

示例(在立即窗口中):

Application.TempVars("abc") = 123
? Application.TempVars("abc") 
 123 
? TempVars![abc]
 123

这些将持续到应用程序关闭,并且将在程序重置后继续存在。

可以在AutoExec宏中使用SetTempVar操作来设置TempVar值。

答案 1 :(得分:1)

根据设计,如果程序出错,则会重置所有变量。

您可以通过调用此命令来强制执行此操作:

End

为避免这种情况,请在您知道的任何地方应用错误处理或认为可能发生错误。

另外,添加一个简单的函数,您可以在开发期间调用它来初始化全局变量。

答案 2 :(得分:1)

扩大4dmonster的答案,

  • 创建一个名为 tbl_global_variables 的本地表。
  • 在那里设置您的设置及其值。
  • 在启动时截断/初始化此表
  • 然后编写函数以从此表中检索值
  • 在检索功能中检查变量是否已初始化

功能将如下所示:

Public function FN_GET_GVALUE() as Boolean
    On error goto vError:
    FN_GET_GVALUE = nz(Dlookup("SettingField", "tbl_global_variables"),false)

    Exit function
vError:
    FN_GET_GVALUE = false
End Function

每次要检查值时,只需询问系统

if fn_get_gValue then
    ... do something
end if
通过这种方式你可以避免失去全球价值......但当然其他人说错误陷阱是VBA的一个好习惯。

答案 3 :(得分:0)

任何未捕获的错误都会重置全局变量。 可能是您可以更改代码以使用公共函数而不是全局变量。该函数应检查返回的值是否为空,然后重新启动它。

Public function JustAString() as string
    static return as string
    if return="" then
        return = SOME calculations
    endif

    JustAString = return
End Function