如何暂停宏代码直到非模态窗体关闭
How to pause macro code until non-modal form is closed
我试图在 Access 2016 中完全使用宏代码来实现这一点,而没有 vba。
我有一个列出工作的表格 frmMaintenance。新作业通过表单 frmAddJob 添加到作业 table tblJob。
当通过 OpenForm 宏单击 frmMaintenance 上的按钮时,将显示 frmAddJob。打开 frmAddJob 后,我想为其控件之一设置一个值,指示作业类型。
然后,在 frmAddJob 关闭后,我想重新查询列出作业的 frmMaintenance 上的控件。
我的 btnAddJob OnClick 中的宏代码大致如下:
- OpenForm //打开frmAddJob
- SetValue //对frmAddJob的控制
- 重新查询//frmMaintenance中的控件
问题是,如果 frmAddJob 是非模态打开的,'Window Mode'=正常,Requery 会立即执行。另一方面,如果使用 'Window Mode'=Dialog 打开 frmAddJob,那么宏代码会暂停,直到 window 关闭,我永远无法设置所需的值。
我想到的 2 个解决方案是:
在 SetValue 之后以某种方式将 frmAddJob 设置为模态。但是,在已经打开的表单上使用 OpenForm 'Window Mode'=Dialog 似乎不起作用。
让 frmAddJob 在其 'On Open' 事件中从 frmMaintenance 获取它需要的值。然而,这使得 frmAddJob 依赖于 frmMaintenance,因此不可重用。
仅使用 maros 是否可行?
根据@June7的建议,大致解决方案是:
在 frmMaintenance 中:
- SetTempVar tvJobType
- OpenForm frmAddJob 模态
- 删除温度变量 tvJobType
- 重新查询
在 frmAddJob 中:
- 在 OnLoad 中,将所需项目的值设置为 [TempVars]![tvJobType]
- 保存新记录
- 关闭
工作正常,frmAddJob 不再需要知道它是从哪里打开的。
我试图在 Access 2016 中完全使用宏代码来实现这一点,而没有 vba。
我有一个列出工作的表格 frmMaintenance。新作业通过表单 frmAddJob 添加到作业 table tblJob。
当通过 OpenForm 宏单击 frmMaintenance 上的按钮时,将显示 frmAddJob。打开 frmAddJob 后,我想为其控件之一设置一个值,指示作业类型。
然后,在 frmAddJob 关闭后,我想重新查询列出作业的 frmMaintenance 上的控件。
我的 btnAddJob OnClick 中的宏代码大致如下:
- OpenForm //打开frmAddJob
- SetValue //对frmAddJob的控制
- 重新查询//frmMaintenance中的控件
问题是,如果 frmAddJob 是非模态打开的,'Window Mode'=正常,Requery 会立即执行。另一方面,如果使用 'Window Mode'=Dialog 打开 frmAddJob,那么宏代码会暂停,直到 window 关闭,我永远无法设置所需的值。
我想到的 2 个解决方案是:
在 SetValue 之后以某种方式将 frmAddJob 设置为模态。但是,在已经打开的表单上使用 OpenForm 'Window Mode'=Dialog 似乎不起作用。
让 frmAddJob 在其 'On Open' 事件中从 frmMaintenance 获取它需要的值。然而,这使得 frmAddJob 依赖于 frmMaintenance,因此不可重用。
仅使用 maros 是否可行?
根据@June7的建议,大致解决方案是:
在 frmMaintenance 中:
- SetTempVar tvJobType
- OpenForm frmAddJob 模态
- 删除温度变量 tvJobType
- 重新查询
在 frmAddJob 中:
- 在 OnLoad 中,将所需项目的值设置为 [TempVars]![tvJobType]
- 保存新记录
- 关闭
工作正常,frmAddJob 不再需要知道它是从哪里打开的。