我正在使用 Access 2010,并希望用户单击 Form1 中名为“另存为”的按钮,该按钮启动 VBA 代码,在代码运行完成之前,让它暂停,打开 Form2(用户输入“另存为”标题,然后单击保存),然后使用在 Form2 中输入的字符串作为变量让代码继续在 Form1 中运行。
我只是不确定如何在 Form1 中“暂停”我的代码,因为它等待用户进行输入。关于如何解决这个问题的任何想法?
我正在使用 Access 2010,并希望用户单击 Form1 中名为“另存为”的按钮,该按钮启动 VBA 代码,在代码运行完成之前,让它暂停,打开 Form2(用户输入“另存为”标题,然后单击保存),然后使用在 Form2 中输入的字符串作为变量让代码继续在 Form1 中运行。
我只是不确定如何在 Form1 中“暂停”我的代码,因为它等待用户进行输入。关于如何解决这个问题的任何想法?
从Form1
,Form2
以对话模式打开。 Form1
代码将等待Form2
。
向 中添加“完成”按钮Form2
,并向其单击事件添加一个过程,该过程通过将其属性设置为 False来重新打开隐藏表单。Form2
隐藏.Visible
将其隐藏会使其脱离对话模式。所以用户输入她的值后,她可以点击“完成”,流控将恢复进入Form1
,可以从 now-hidden 上的控件读取输入值Form2
。
使用这种方法,Form2
不需要知道任何关于Form1
. 因此Form2
可用于收集任意形式的输入……或其他代码。
所以假设Form1
有一个名为 的命令按钮cmdSaveAs
,使用类似这样的东西作为它的点击事件过程。
Private Sub cmdSaveAs_Click()
DoCmd.OpenForm "Form2", acNormal, WindowMode:=acDialog
' the next line is not executed while Form2 is modal (open in dialog mode);
' but after Form2 is hidden, we can read the value of the text
' box named txtInput
MsgBox "User input was: " & Forms!Form2!txtInput
End Sub
您需要使用 Docmd.OpenForm 打开 Form2,并将 WindowMode 参数设置为 acDialog。这会导致调用窗体 (Form1) 上的代码停止并等待被调用窗体 (Form2) 关闭。在 Form2 上,当您单击“保存”按钮时,可以将“另存为”标题写入 Form1 上的隐藏文本框控件或将 Form1 上的属性设置为所需的值。当您返回 Form1 时,如果用户没有为“另存为”标题输入值,请确保您计划好您希望发生的事情。