首页 > 解决方案 > 如何暂停宏代码直到非模态表单关闭

问题描述

我试图在 Access 2016 中纯粹使用宏代码来实现这一点,没有 vba。

我有一个表格 frmMaintenance 列出了工作。新作业通过 frmAddJob 形式添加到作业表 tblJob。

当在 frmMaintenance 上单击按钮时,由 OpenForm 宏显示 frmAddJob。打开 frmAddJob 后,我想设置其中一个控件的值,指示作业类型。

然后,在 frmAddJob 关闭后,我想重新查询 frmMaintenance 上列出作业的控件。

我的 btnAddJob OnClick 中的宏代码大致如下:

问题是如果 frmAddJob 以非模态方式打开,'Window Mode'=Normal,Requery 会立即执行。另一方面,如果使用“窗口模式”=Dialog 打开 frmAddJob,则宏代码会暂停,直到窗口关闭,并且我永远无法设置所需的值。

我想到的两个解决方案是:

在 SetValue 之后,以某种方式将 frmAddJob 设置为模态。但是,在已经打开的表单上使用 OpenForm 'Window Mode'=Dialog 似乎不起作用。

让 frmAddJob 在其“On Open”事件中从 frmMaintenance 获取所需的值。但是,这使得 frmAddJob 依赖于 frmMaintenance,因此不可重用。

这可能只使用maros吗?

标签: ms-accessms-access-2016

解决方案


根据@June7 的建议,大纲中的解决方案是:

在 frmMaintenance 中:

  • SetTempVar tvJobType
  • OpenForm frmAddJob 模态
  • RemoveTempVar tvJobType
  • 重新查询

在 frmAddJob 中:

  • 在 OnLoad 中,将所需项目的 SetValue 设置为 [TempVars]![tvJobType]
  • 保存新记录

工作正常,并且要求 frmAddJob 了解它的打开位置已经不复存在。


推荐阅读