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

gta*_*004 0 forms ms-access vba access-vba

这个

DoCmd.OpenForm fnew, , , , , acDialog
Run Code Online (Sandbox Code Playgroud)

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

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>
Run Code Online (Sandbox Code Playgroud)

Han*_*sUp 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
Run Code Online (Sandbox Code Playgroud)

请注意,只要表单尚未打开,代码就会按照描述进行操作.如果它在"设计视图"中打开,则调用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
Run Code Online (Sandbox Code Playgroud)

  • 感谢您鼓励使用命名参数. (2认同)