0

I am trying to figure out how to import Data Macros to my tables in Microsoft Access 2019/365. I have a lot of tables/columns that I want to add a data macro to for Audit Trail creation.

If I copy a macro from the Macro Design screen in MS Access and paste it into a text editor (i.e. Notepad++) I get the XML code for the macro. I would like to be able to modify this code and use it in another table.

I cannot figure out how to import this code back into Access. When I try to copy and paste it back in - I receive the following error message:

Microsoft Access could not understand the macro format.

This is the XML code that I am using

<DataMacros xmlns="http://schemas.microsoft.com/office/accessservices/2009/11/application"><DataMacro Event="AfterInsert"><Statements><CreateRecord Collapsed="true"><Data Alias="AT"><Reference>z_sys_tblAuditTrail</Reference></Data><Statements><Action Name="SetField"><Argument Name="Field">AT.TableName</Argument><Argument Name="Value">"_ref_tblOfficeLocatons"</Argument></Action><Action Name="SetField"><Argument Name="Field">AT.RecordID</Argument><Argument Name="Value">[_ref_tblOfficeLocatons].[MailboxID]</Argument></Action><Action Name="SetField"><Argument Name="Field">AT.ChangeBy</Argument><Argument Name="Value">fDisplayUpdateUser()</Argument></Action><Action Name="SetField"><Argument Name="Field">AT.FieldName</Argument><Argument Name="Value">"MailboxID"</Argument></Action><Action Name="SetField"><Argument Name="Field">AT.NewValue</Argument><Argument Name="Value">[_ref_tblOfficeLocatons].[MailboxID]</Argument></Action><Action Name="SetField"><Argument Name="Field">AT.ChangeDate</Argument><Argument Name="Value">Now()</Argument></Action><Action Name="SetField"><Argument Name="Field">AT.Action</Argument><Argument Name="Value">"I"</Argument></Action></Statements></CreateRecord></Statements></DataMacro></DataMacros><DataMacros xmlns="http://schemas.microsoft.com/office/accessservices/2009/11/application"><DataMacro Event="AfterInsert"><Statements><CreateRecord Collapsed="true"><Data Alias="AT"><Reference>z_sys_tblAuditTrail</Reference></Data><Statements><Action Name="SetField"><Argument Name="Field">AT.TableName</Argument><Argument Name="Value">"_ref_tblOfficeLocatons"</Argument></Action><Action Name="SetField"><Argument Name="Field">AT.RecordID</Argument><Argument Name="Value">[_ref_tblOfficeLocatons].[MailboxID]</Argument></Action><Action Name="SetField"><Argument Name="Field">AT.ChangeBy</Argument><Argument Name="Value">fDisplayUpdateUser()</Argument></Action><Action Name="SetField"><Argument Name="Field">AT.FieldName</Argument><Argument Name="Value">"Building"</Argument></Action><Action Name="SetField"><Argument Name="Field">AT.NewValue</Argument><Argument Name="Value">[_ref_tblOfficeLocatons].[Building]</Argument></Action><Action Name="SetField"><Argument Name="Field">AT.ChangeDate</Argument><Argument Name="Value">Now()</Argument></Action><Action Name="SetField"><Argument Name="Field">AT.Action</Argument><Argument Name="Value">"I"</Argument></Action></Statements></CreateRecord></Statements></DataMacro></DataMacros><DataMacros xmlns="http://schemas.microsoft.com/office/accessservices/2009/11/application"><DataMacro Event="AfterInsert"><Statements><CreateRecord Collapsed="true"><Data Alias="AT"><Reference>z_sys_tblAuditTrail</Reference></Data><Statements><Action Name="SetField"><Argument Name="Field">AT.TableName</Argument><Argument Name="Value">"_ref_tblOfficeLocatons"</Argument></Action><Action Name="SetField"><Argument Name="Field">AT.RecordID</Argument><Argument Name="Value">[_ref_tblOfficeLocatons].[MailboxID]</Argument></Action><Action Name="SetField"><Argument Name="Field">AT.ChangeBy</Argument><Argument Name="Value">fDisplayUpdateUser()</Argument></Action><Action Name="SetField"><Argument Name="Field">AT.FieldName</Argument><Argument Name="Value">"Room"</Argument></Action><Action Name="SetField"><Argument Name="Field">AT.NewValue</Argument><Argument Name="Value">[_ref_tblOfficeLocatons].[Room]</Argument></Action><Action Name="SetField"><Argument Name="Field">AT.ChangeDate</Argument><Argument Name="Value">Now()</Argument></Action><Action Name="SetField"><Argument Name="Field">AT.Action</Argument><Argument Name="Value">"I"</Argument></Action></Statements></CreateRecord></Statements></DataMacro></DataMacros><DataMacros xmlns="http://schemas.microsoft.com/office/accessservices/2009/11/application"><DataMacro Event="AfterInsert"><Statements><CreateRecord Collapsed="true"><Data Alias="AT"><Reference>z_sys_tblAuditTrail</Reference></Data><Statements><Action Name="SetField"><Argument Name="Field">AT.TableName</Argument><Argument Name="Value">"_ref_tblOfficeLocatons"</Argument></Action><Action Name="SetField"><Argument Name="Field">AT.RecordID</Argument><Argument Name="Value">[_ref_tblOfficeLocatons].[MailboxID]</Argument></Action><Action Name="SetField"><Argument Name="Field">AT.ChangeBy</Argument><Argument Name="Value">fDisplayUpdateUser()</Argument></Action><Action Name="SetField"><Argument Name="Field">AT.FieldName</Argument><Argument Name="Value">"RoomDescr"</Argument></Action><Action Name="SetField"><Argument Name="Field">AT.NewValue</Argument><Argument Name="Value">[_ref_tblOfficeLocatons].[RoomDescr]</Argument></Action><Action Name="SetField"><Argument Name="Field">AT.ChangeDate</Argument><Argument Name="Value">Now()</Argument></Action><Action Name="SetField"><Argument Name="Field">AT.Action</Argument><Argument Name="Value">"I"</Argument></Action></Statements></CreateRecord></Statements></DataMacro></DataMacros><DataMacros xmlns="http://schemas.microsoft.com/office/accessservices/2009/11/application"><DataMacro Event="AfterInsert"><Statements><CreateRecord Collapsed="true"><Data Alias="AT"><Reference>z_sys_tblAuditTrail</Reference></Data><Statements><Action Name="SetField"><Argument Name="Field">AT.TableName</Argument><Argument Name="Value">"_ref_tblOfficeLocatons"</Argument></Action><Action Name="SetField"><Argument Name="Field">AT.RecordID</Argument><Argument Name="Value">[_ref_tblOfficeLocatons].[MailboxID]</Argument></Action><Action Name="SetField"><Argument Name="Field">AT.ChangeBy</Argument><Argument Name="Value">fDisplayUpdateUser()</Argument></Action><Action Name="SetField"><Argument Name="Field">AT.FieldName</Argument><Argument Name="Value">"RoomType"</Argument></Action><Action Name="SetField"><Argument Name="Field">AT.NewValue</Argument><Argument Name="Value">[_ref_tblOfficeLocatons].[RoomType]</Argument></Action><Action Name="SetField"><Argument Name="Field">AT.ChangeDate</Argument><Argument Name="Value">Now()</Argument></Action><Action Name="SetField"><Argument Name="Field">AT.Action</Argument><Argument Name="Value">"I"</Argument></Action></Statements></CreateRecord></Statements></DataMacro></DataMacros>

Any assistance that you can provide would be grateful. All the searches that I have done talk about using Macros to import data from other sources... none talk about importing the actual macro itself.

psycoperl
  • 121
  • 1
  • 15
  • Quite possible what you want is not possible. Why use data macros for audit trail? Review http://allenbrowne.com/AppAudit.html – June7 Sep 01 '22 at 16:51
  • Review this discussion https://social.msdn.microsoft.com/Forums/en-US/90293acb-7c5f-44c7-87d6-2f99e6e01bf3/pasting-xml-for-a-data-macro?forum=accessdev – June7 Sep 01 '22 at 16:58
  • 1
    Okay, it is possible. I can make manual copy/paste work with my macro xml but not yours. I also used Notepad++ to view the xml and copied from the Notepad++ document. – June7 Sep 01 '22 at 17:21

0 Answers0