2

我对 MS Access 很陌生,请原谅我这个简单的问题,但我对当前的问题感到非常困惑。

因此,我想在表接收到其中一个字段的更新后运行 VBA 函数。我所做的是:

  1. 在 CREATE->Macro 下创建一个名为 Macro_update 的宏,动作为 RunCode,它的参数是我希望运行的 VBA 函数。该功能没有错误。

  2. 选择我的表,在 Table->After Update 下,我写了

     IF [Old].[status]=0 And [status]=1 THEN
     RunDataMacro 
      MacroName Macro_update
    

但是在我更新表中的状态字段后,什么也没发生......我怀疑在第 2 步中我的操作是 RunDataMacro,但我实际上正在运行一个宏(有区别吗?)......任何帮助都是赞赏!

4

1 回答 1

9

您现在可以使用数据宏使其在本地工作。这意味着该表需要存储在 Access 数据库中。

如果您的 Web 服务实际上并未使用 Access 运行时与 access 数据库容器交互,则数据宏可能无法正确触发或按预期触发。你的旅费可能会改变。

如果您稍后将数据库迁移到 SQL 服务器(MySQL、Microsoft SQL、PostgreSQL),那么您的数据宏将需要在 SQL 服务器上作为触发器本地实现。

现在,我在下面编写一些说明来演示如何在单个 Access 数据库中从本地数据宏调用 VBA 函数:


创建 VBA 函数 这将是您要从数据宏中调用的函数。

  • 在Module中创建它,而不是在 Form 或 Class Module 中。
  • 这必须是一个函数,不能是一个

代码:

Public Function VBAFunction(OldValue As String, NewValue As String) As String
  Debug.Print "Old: " & Chr(34) & OldValue & Chr(34);
  Debug.Print vbTab;
  Debug.Print "New: " & Chr(34) & NewValue & Chr(34)
  VBAFunction = "Worked"
End Function

创建数据宏 (这里将更具描述性,因为人们在这里很容易迷路)

  1. 在设计视图中打开表(即TestTable)
  2. 找到正确的功能区
    • 在表设计视图中,有一个名为Design的上下文功能区。
    • 在该功能区上,有一个名为“创建数据宏”的选项
  3. 单击创建数据宏并选择更新后
    • 宏设计器窗口现在应该打开
  4. 添加新操作组合框中 选择SetLocalVar
    • 出现一个SetLocalVar部分。
    • 在本节中,我看到名称表达式
  5. Name设置为任意值,例如:MyLocalVar

  6. 表达式设置为以下

    • 请务必输入 = 号,这将导致显示两个等号

表达式文本:

    =VBAFunction([Old].[FieldName],[FieldName])
  1. 保存数据宏关闭宏设计器
  2. 保存表关闭表

测试它:创建更新查询

接下来,您将需要创建一个更新查询,该查询对包含您刚刚创建的数据宏的表执行更新。

要对此进行测试,您只需将所有记录中的字符串字段更新为一个值。

UPDATE [TestTable] SET [TestText] = "Test"
  • 运行查询

Control + G调出即时窗口。您会注意到每个更新的记录都会触发数据宏。

于 2016-08-08T23:13:40.197 回答