为什么我的VBA代码的注释里有XML?

Why is there XML in the comments of my VBA code?

我接手了一个旧的 Microsoft Access 项目,该项目在几个过程中被注释掉了 XML。例如:

'------------------------------------------------------------
' closeManageEmployees_Click
'
'------------------------------------------------------------
Private Sub closeManageEmployees_Click()
On Error GoTo closeManageEmployees_Click_Err

    ' _AXL:<?xml version="1.0" encoding="UTF-16" standalone="no"?>
    ' <UserInterfaceMacro For="OpenNewEmployee" Event="OnClick" xmlns="http://schemas.microsoft.com/office/accessservices/2009/11/application"><Statements><Action Name="OpenForm"><Argument Name="For
    ' _AXL:mName">newEmployee</Argument><Argument Name="DataMode">Add</Argument><Argument Name="WindowMode">Dialog</Argument></Action></Statements></UserInterfaceMacro>
    DoCmd.Close , ""


closeManageEmployees_Click_Exit:
    Exit Sub

closeManageEmployees_Click_Err:
    MsgBox Error$
    Resume closeManageEmployees_Click_Exit

End Sub

这里注释掉了三行XML,开头是_AXL。除了围绕“员工”这一同一主题,我看不到 XML 所描述的内容与例程所做的事情之间有任何关联。事实上,这段代码看起来甚至可能是从 OpenNewEmployee_Click() 复制过来的,它具有一组相似的命令和格式,只是缺少任何 XML:

'------------------------------------------------------------
' OpenNewEmployee_Click
'
'------------------------------------------------------------
Private Sub OpenNewEmployee_Click()
On Error GoTo OpenNewEmployee_Click_Err

    DoCmd.OpenForm "newEmployee", acNormal, "", "", acAdd, acDialog


OpenNewEmployee_Click_Exit:
    Exit Sub

OpenNewEmployee_Click_Err:
    MsgBox Error$
    Resume OpenNewEmployee_Click_Exit

End Sub

这种格式在这个项目中以多种形式重复出现。我猜 XML 只是从转换为 VBA 代码的宏中遗留下来的垃圾,我猜对了吗?

这是使用宏转换为VBA的结果。

请记住,在 Access 中我们有两种编程语言。

所谓的“易于”使用的宏语言 - 专为非程序员设计。

然后我们有 VBA (Visual Basic for Applications)。

那么,当您将按钮拖放到表单上时?

你有两个选择:

因此,如果您选择宏生成器,那么您不再使用 VBA,而是一个宏。

因此,您可以用该宏语言编写相当“简单”的操作。结果发现宏语言存储为xml。此更改发生在 Access 2010 中(因此,不是超旧提供 25 年以上的访问历史)。在 Access 2010 之前,宏存在,但它们没有存储为 xml.

他们在 2010 年为宏添加了一个“不错的”if/then 块结构,以及一个 re-vamped 宏编辑器。

因此,作为开发人员,您可以(并且将会)很快就不再使用宏,因此随着时间的推移,您希望使用和采用 VBA 代码来代替宏。

因此,access 中有一个选项可以将这些“宏”转换为VBA,因此您之前看到的xml 代码实际上是以前的宏代码。事实上,您可以将 xml 剪切并粘贴到宏编辑器中,代码就在您眼前。

您还可以在工具中将按钮事件设置为默认使用 VBA - 因此没有上述提示(使用宏或 VBA - 它会直接跳转到 VBA代码和事件)。

还有一个小缺点?事件向导曾经有使用 VBA 的选项,但它们现在总是使用 XML + 宏 - 即使您的事件设置要使用 VBA.

那么,如果我将您的 xml 剪切并粘贴到宏编辑器中呢?你看到这个:

内置向导现在总是使用宏。但是,如果您想扩展或修改事件代码或按钮单击代码?然后使用转换为 VBA 功能 - 这个:

使用宏有什么好的理由吗?

嗯,不是真的,但有一个重要原因吗?

2010 年的 Access 收到了我们所说的真正 table 触发器,甚至在 table 级别存储过程代码。这意味着如果您从代码更新 table,则数据宏(table 存储代码)可以 运行。所以,这至少是学习使用宏的原因之一。这样 table 级别的宏代码 运行s 当你更新 table - 即使你使用说 vb.net,或 FoxPro 或任何其他数据源 - 那些 table触发器和存储代码过程将 运行.

但是您看到 xml 文字了吗?它是从宏(在本例中为 UI 宏)转换为 VBA 代码的结果。