暂停代码以传递用户输入的值

时间:2012-11-16 18:03:14

标签: ms-access

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

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

2 个答案:

答案 0 :(得分:2)

Form1,在对话框模式下打开Form2Form1代码将在Form2上等待。

Form2添加“完成”按钮,并向其点击事件添加一个过程,重新打开Form2隐藏通过设置其.Visible来隐藏表单财产到假。使其隐藏会使其脱离对话框模式。因此,在用户输入她的值之后,她可以单击“完成”,流控制将在Form1中恢复,并且可以从现在隐藏的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

答案 1 :(得分:1)

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