1

我正在使用 Access 2010,并希望用户单击 Form1 中名为“另存为”的按钮,该按钮启动 VBA 代码,在代码运行完成之前,让它暂停,打开 Form2(用户输入“另存为”标题,然后单击保存),然后使用在 Form2 中输入的字符串作为变量让代码继续在 Form1 中运行。

我只是不确定如何在 Form1 中“暂停”我的代码,因为它等待用户进行输入。关于如何解决这个问题的任何想法?

4

2 回答 2

2

Form1Form2以对话模式打开。 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
于 2012-11-16T18:12:59.120 回答
1

您需要使用 Docmd.OpenForm 打开 Form2,并将 WindowMode 参数设置为 acDialog。这会导致调用窗体 (Form1) 上的代码停止并等待被调用窗体 (Form2) 关闭。在 Form2 上,当您单击“保存”按钮时,可以将“另存为”标题写入 Form1 上的隐藏文本框控件或将 Form1 上的属性设置为所需的值。当您返回 Form1 时,如果用户没有为“另存为”标题输入值,请确保您计划好您希望发生的事情。

于 2012-11-16T18:08:59.113 回答