在 AfterInsert DataMaco 中调用 VBA 时引用刚刚添加的记录

Referencing Just Added Record When Using Call to VBA in AfterInsert DataMaco

访问 2016,table 使用 AfterInsert 数据宏。

在对我无法再找到的上一个问题的评论中,Albert D. Kallal(用户:10527)指出,如果使用 Set LocalVar 方法调用 vba 中的用户定义函数, 即 vba "session" 没有看到新插入的记录。

即使传入新添加记录的标识,任何引用刚刚添加记录的 table 的查询都不会看到新插入的记录。

有没有人开发出解决方法,例如在构建闭包时-table,新添加的记录可见或可以使用?

这与 Alberta Kallal 很好地共享了使用 "after update" 方法复制现有记录的解决方案以解决无法在 for each 循环中创建记录的问题非常相似。但是,在这种情况下,我想使用查询结果作为复制/插入的基础,而不仅仅是复制现有行或 'hard coding' 修改数据宏的业务逻辑(因此很容易如果 vba 方法可以看到刚添加的行)。

具体用例是尝试创建一种在会计应用程序中插入 "induced" 记录的方法。一个人赚了一些没有减税的钱,所以创建一个自动日记帐分录显示未来纳税义务是很好的。换句话说,table 中存在的记录应该会自动生成额外的记录 - 并且这些额外记录的业务逻辑是通过查询定义的。

更具体地说,给定一个 "transactions" table,其中包含字段 RegisterID、AccountID、Amount、TrDate,以及一个 "Induced Transaction Queries" table,它指定查询以提供包含字段 AutoNumberId、QueryThatDefinesAdditionalTransactions(和多行,例如 "Query That adds self"、"Query That Adds Tax Liability"、"Query That Computes Sales Tax Portion")、

的诱导交易

数据宏如何根据遍历 "Induced Transaction Queries" table 并插入查询结果在 "Transactions For Analysis" Table 中创建行在每行中应用到原始 "transactions table"

中新添加的行

谢谢

嗯,虽然在插入事件后从宏调用 VBA 无法获取刚刚插入的行,但 VBA 例程可以读取和更新任意多的其他行。如果您在 VBA 中写出的新行或数据必须包含刚刚插入的行中的数据?

我们将这些列传递给 VBA 例程。所以它现在可以将所有其他行相加,然后包括刚刚从数据宏传递的值。

因此数据宏(插入后)可以如下所示:

因此 VBA 代码可以如下所示:

Public Function AfterU(vid As Variant, Amount As Variant)

  Debug.Print vid, Amount

  Dim rst     As DAO.Recordset
  ' open table, sum data
  ' add Amount passed.

  ' write out data to some table.
  ' caution - don't add reocrds to this table that has the trigger
  ' else you wind up in a endless loop


End Function

以上当然要放在标准代码模块(不是表格)中,并且必须按照上面的方式定义为public。

因此,当您发现刚刚添加的记录尚未提交给 table(即将提交)时,您仍然可以 运行 + 调用一些 VBA 代码.您只是没有接触到刚刚(即将)插入的唱片。

但是,既然您可以通过所需的列(例如金额等)来包含在最终总计中?然后,您可以随意编写任意多的 VBA 更新和插入代码。因此,您可以提取一些记录、构建一个总计,然后更新一些现有记录,甚至添加一条新记录。只需包括通过的新金额。

如前所述,您不想“纠结”写入具有此类触发器和 VBA 插入的 table,因为您很容易陷入无限循环。

但是,要添加、更新或插入到另一个 table,您应该可以在 VBA 代码中按您喜欢的方式进行操作。