我有一个全局变量,它只是一个字符串。我通过AutoExec打开Access时设置它。此变量基于bool是true还是false,它也是全局变量。
设置全局变量很好。但是我有一个错误,这意味着我需要停止我的代码并再次启动它来修复它。然后,这会导致全局变量设置为空。
这是正常行为吗?我刚才注意到它丢失的地方。但是,这意味着如果出现任何错误,我需要停止我的代码来修复它。每次都会迷路。并需要关闭并再次打开它。
无论如何都要保持设置直到我只关闭Access?
答案 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的答案,
功能将如下所示:
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