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

时间:2013-05-02 19:05:07

标签: forms vba ms-access access-vba

DoCmd.OpenForm fnew, , , , , acDialog

由于某种原因似乎没有停止代码执行。是因为我正在调用具有此方法的函数来自另一个函数并且正在弄乱它吗? E.g。

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>

2 个答案:

答案 0 :(得分:5)

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

答案 1 :(得分:1)

我在这个问题上苦苦挣扎多年,直到我意识到如果在运行代码时在设计视图中打开表单,acDialog设置什么都不做。它实际上在正常使用中运行时暂停了打开过程中的代码(即没有人试图设计任何东西)。如果要测试此行为,请创建表单“zzTestForm”,然后从模块运行:

Public Sub DoThis()

MsgBox "ok, let's go"

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

MsgBox "you done yet?"

End Sub