暂时禁用 MS Access 数据宏

Posted

技术标签:

【中文标题】暂时禁用 MS Access 数据宏【英文标题】:Temporarily disable MS Access data macros 【发布时间】:2014-08-25 21:44:04 【问题描述】:

我有几个 Access 文件,其中包含我要导入到一个主文件中的一组用户的数据。用户文件中的每个表都配置了一个更改前数据宏,该宏在用户每次编辑数据时添加一个时间戳

(“数据宏”类似于 SQL Server 中的触发器。它们不同于 UI 宏。更多信息,see this page。)

我想将这些时间戳导入主文件,但由于主文件是用户文件的克隆,它还包含相同的数据宏集。因此,当我导入数据时,时间戳会更改为导入时间,这无济于事。

我能找到编辑数据宏的唯一方法是在设计视图中打开每个表,然后使用功能区更改设置。一定有更简单的方法。

我正在使用 VBA 代码执行合并,我想知道是否也可以使用它来暂时禁用数据宏功能,直到合并完成。如果有另一种方法可以一次关闭所有文件/表的数据宏,即使是用户的文件/表,我也会对此持开放态度。

【问题讨论】:

【参考方案1】:

禁用代码?不。绕过代码?是的。 使用表/字段作为标志。导入前设置状态。检查事件代码中此标志的状态,并决定是否要跳过其余代码。即

If [tblSkipFlag].[SkipFlag] = false
  rest of data macros
EndIf

【讨论】:

【参考方案2】:

另一个答案here 解释了如何使用带有acTableDataMacro 参数的(几乎)未记录的SaveAsTextLoadFromText 方法将数据宏保存和检索到XML 格式的文本文件中。如果要为每个表保存数据宏 XML 文本,请替换 ...

<DataMacro Event="BeforeChange"><Statements>

...与...

<DataMacro Event="BeforeChange"><Statements><Action Name="StopMacro"/>

...然后将更新后的宏写回表中,这可能会产生“短路”这些宏的效果。

【讨论】:

以上是关于暂时禁用 MS Access 数据宏的主要内容,如果未能解决你的问题,请参考以下文章

MS Access 事件驱动数据宏更新表(示例)

如何在宏禁用系统上锁定 Access 数据库?

Access 2013:我可以使用数据宏触发 MS SQL SP 而不延迟 Access 中的执行吗?

如何从 C# 调用 MS Access 数据库宏

从 VBA 代码中转储 MS Access 宏对象信息

用于批量上传的 MS Access 宏