MS Access OpenForm acDialog 选项似乎不起作用

Posted

技术标签:

【中文标题】MS Access OpenForm acDialog 选项似乎不起作用【英文标题】:MS Access OpenForm acDialog option does not seem to work 【发布时间】:2013-05-02 19:05:07 【问题描述】:

这个

DoCmd.OpenForm fnew, , , , , acDialog

由于某种原因似乎没有停止代码执行。是因为我正在从另一个函数调用具有此方法的函数并且把它搞砸了吗? 例如

func1
<code>
Call func2
    <func2 code>
    DoCmd.OpenForm fnew, , , , , acDialog
<back to func1 code that executes even though i dont want it to until the form closes>

【问题讨论】:

【参考方案1】:

使用acDialog 作为OpenForm WindowMode 参数,您的调用代码在窗体关闭之前不应继续。

OpenForm 发生在从您的代码调用的另一个过程中并不重要。在这个例子中,当运行func1 时,MsgBox 在窗体关闭之前不会显示。

Public Function func1()
    Call func2
    MsgBox "form closed"
End Function

Public Function func2()
    'DoCmd.OpenForm "Form3", , , , , acDialog
    DoCmd.OpenForm "Form3", WindowMode:=acDialog
End Function

请注意,只要表单尚未打开,代码就会按照描述的方式运行。如果它在设计视图中打开,调用OpenForm 只会将其切换到表单视图而不应用acDialog。如果在表单视图中打开,则没有任何反应,这意味着 acDialog 也不会被应用。

如果您想保证应用acDialog,请确保在调用OpenForm之前关闭表单...

Public Function func2()
    Const cstrForm As String = "Form3"
    If CurrentProject.AllForms(cstrForm).IsLoaded Then
        DoCmd.Close acForm, cstrForm
    End If
    'DoCmd.OpenForm cstrForm, , , , , acDialog
    DoCmd.OpenForm cstrForm, WindowMode:=acDialog
End Function

【讨论】:

感谢您鼓励使用命名参数。 是的,使用 acDialog 会停止执行。您可能希望包含 @user3760185 的评论,即如果您在测试时在设计视图中打开对话框表单,代码执行将不会暂停。【参考方案2】:

我为此苦苦挣扎了很久,直到我意识到如果在运行代码时表单在设计视图中打开,acDialog 设置将不起作用。在正常使用时(即没有人试图设计任何东西),它实际上会暂停打开过程中的代码。如果您想测试此行为,请创建一个表单“zzTestForm”,然后从模块中运行它:

Public Sub DoThis()

MsgBox "ok, let's go"

DoCmd.OpenForm "zzTestForm", acNormal, , , acFormPropertySettings, acDialog

MsgBox "you done yet?"

End Sub

【讨论】:

以上是关于MS Access OpenForm acDialog 选项似乎不起作用的主要内容,如果未能解决你的问题,请参考以下文章

MS Access Openform - 所需的空白字段值

Access 中的 DoCMD.OpenForm - 使用 WHERE 打开具有有限记录集的表单

MS Access VBA - 不知何故没有通过 OpenArgs,总是 NULL

MS Access 2007 - OpenArgs 没有将值传递给下一个表单?

如何防止旧版访问代码中的“OpenForm 操作被取消”

使用带有 where 子句的宏打开表单并打开对话框