Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ms access MS Access查询:检查表单是否打开/检查参数是否需要输入_Ms Access_Ms Access 2010 - Fatal编程技术网

Ms access MS Access查询:检查表单是否打开/检查参数是否需要输入

Ms access MS Access查询:检查表单是否打开/检查参数是否需要输入,ms-access,ms-access-2010,Ms Access,Ms Access 2010,我目前正在尝试使用MS Access查询(使用GUI工具,而不是SQL工具),在不使用VBA的情况下检查特定表单是否打开 使用以下表达式: Expr1 : [Formulaires]![Form1].[Visible] 如果Form1是打开的,查询工作正常,但是如果Form1是关闭的,它会请求输入,因为Form1没有打开,变量也不再存在 有没有办法检查特定表单是否打开,或者检查某个变量是否需要输入?您需要一个VBA函数来发现这一点,但您可以从查询中调用该函数,并将结果合并到公式中 如果加载表单

我目前正在尝试使用MS Access查询(使用GUI工具,而不是SQL工具),在不使用VBA的情况下检查特定表单是否打开

使用以下表达式:

Expr1 : [Formulaires]![Form1].[Visible]
如果Form1是打开的,查询工作正常,但是如果Form1是关闭的,它会请求输入,因为Form1没有打开,变量也不再存在


有没有办法检查特定表单是否打开,或者检查某个变量是否需要输入?

您需要一个VBA函数来发现这一点,但您可以从查询中调用该函数,并将结果合并到公式中

如果加载表单,此函数将返回true

Function IsFormLoaded(strForm As String) As Boolean

Dim frm As Form

For Each frm In Forms
    If frm.Name = strForm Then
        IsFormLoaded = True
        Exit Function
    End If
Next

End Function
然后可以在IIF语句中使用该函数

IIF(IsFormLoaded('MyForm'), MyForm.Control.Value, '')
是,请使用以下功能:

Public Function IsFormLoaded(ByVal strForm As String) As Boolean

    Dim frmForm     As Form
    Dim booLoaded   As Boolean

    For Each frmForm In Forms
        If frmForm.Name = strForm Then
            booLoaded = True
            Exit For
        End If
    Next

    IsFormLoaded = booLoaded

    Set frmForm = Nothing

End Function
我用这个:

If IsOpen("FormName") Then 
DoCmd.Close acForm, "FormName"
End if
[将此功能放在单独的模块中]

Public Function IsOpen(fn As String) As Boolean 'returns True if form is open
If SysCmd(acSysCmdGetObjectState, acForm, fn) <> 0 Then IsOpen = True
End Function
如果窗体打开,则公共函数IsOpen(fn作为字符串)As Boolean'返回True
如果SysCmd(acSysCmdGetObjectState,acForm,fn)为0,则IsOpen=True
端函数

如果CurrentProject.AllForms(strForm).IsLoaded,为什么要循环表单,而不仅仅是
?它还循环表单集合,仅循环所有表单,而不仅仅是加载的表单,因此速度大约慢十倍。此外,通过检查属性CurrentView.Perfects,可以轻松地扩展该函数,以检查加载的表单是否不在设计视图中。它完善、运行速度快,并且完全符合我的要求。谢谢你的回答,我不知道IFF函数