是否可以在access-2007中检测是否存在使用VBA的打开查询?
我正在打开这样的查询:
stDocName = "Meeting_Reasons_Frequency"
DoCmd.OpenQuery stDocName
是否可以检测它是否已打开?
答案 0 :(得分:8)
怎么样:
If SysCmd(acSysCmdGetObjectState, acQuery, "QueryName") = acObjStateOpen Then
更多信息:http://msdn.microsoft.com/en-us/library/aa205281(office.10).aspx
答案 1 :(得分:1)
不确定这是否适用于查询,但我注意到对于表单,您应该使用And
而不是=
。
If SysCmd(acSysCmdGetObjectState, acForm, "FormName") And acObjStateOpen Then
显然,表单可以有多个"状态"同时。使用And
选择你想要的那个;它在这种情况下充当了一个按位运算符。
答案 2 :(得分:1)
SysCmd(acSysCmdGetObjectState, acQuery, "QueryName")
返回零。
否则,它将返回以下任何一种适用的常数之和:
acObjStateOpen
(1)在任何状态(新的,脏的等)或视图(设计,数据表等)下打开acObjStateDirty
(2)打开,但未保存设计更改acObjStateNew
(4)一个尚未保存到其父集合(QueryDefs
)的新查询也许大多数时候都会检查SysCmd
表达式= acObjStateOpen
是否足够。但是,如果要避免在未保存设计更改的情况下打开查询时感到意外,可以将And acObjStateOpen
设置为pianoJames suggested。
但是,如果您打算在 QueryName 打开时执行某些操作,则可以简单地检查它是否未关闭(零):
If SysCmd(acSysCmdGetObjectState, acQuery, "QueryName") <> 0 Then