我正在使用Access 2010,并希望用户单击Form1中名为“另存为”的按钮启动VBA代码,在代码运行完毕之前,让它暂停,打开Form2(用户所在的位置)输入“另存为”标题,然后单击“保存”,然后使用在Form2中输入的字符串作为变量,使用Form1继续运行代码。
我只是不确定如何在Form1中“暂停”我的代码,因为它等待用户输入。关于如何处理这个的任何想法?
答案 0 :(得分:2)
从Form1
,在对话框模式下打开Form2
。 Form1
代码将在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时未输入“另存为”标题的值,请确保计划要执行的操作。