【问题标题】:Running a MS Access 2016 VBA function through a Macro, then Running that Macro through Excel通过宏运行 MS Access 2016 VBA 函数,然后通过 Excel 运行该宏
【发布时间】:2019-02-28 17:07:22
【问题描述】:

我正在编辑一个项目并尝试获取当前通过单击表单的按钮运行的 VBA 函数,并通过宏运行它,以便我可以调用它以在 Excel 中运行。

当前子读取如下内容。

Public Sub Command42_Click()

'Clear All Tables
DoCmd.RunSQL "DELETE * FROM dbo_Tbl1"
DoCmd.RunSQL "DELETE * FROM dbo_Tbl2"
DoCmd.RunSQL "DELETE * FROM dbo_Tbl3"
DoCmd.RunSQL "DELETE * FROM dbo_Tbl4"
DoCmd.RunSQL "DELETE * FROM dbo_Tbl5"
DoCmd.RunSQL "DELETE * FROM dbo_Tbl6"
DoCmd.RunSQL "DELETE * FROM dbo_Tbl7"
DoCmd.RunSQL "DELETE * FROM dbo_Tbl8"

  Dim strSQL     As String

  Dim strLocalTable  As String

'Data Download

  With CurrentDb.QueryDefs("setup_PTQ")
     .SQL = "select * from SQL_Server_tbl"
  End With

  strLocalTable = "dbo_tbl1"

  CurrentDb.Execute "INSERT INTO " & strLocalTable & " SELECT * FROM setup_PTQ"

DoCmd.OpenQuery "qry_1"
DoCmd.Close acQuery, "qry_2"

End Sub

为了简洁起见,我已经缩短了代码,但是对于表 2 - 8 也重复了“数据下载步骤”。

此代码在 Access 表单按钮中运行良好,无需编辑。

当我将此代码复制到独立模块并运行它时,它也可以工作。

当我尝试在宏中调用新开发的模块时,我的问题就开始了。

我设置了一个运行代码步骤,输入新的函数名称(例如,我将Command42_Click() 更改为Test(),这就是我所说的),然后它返回一个错误。

会出现一个消息框,其中包含以下文字说明:

“你输入的表达式有一个 Microsoft Access 找不到的函数名”

然后告诉我错误号是2425,而参数"Test()" 是找不到的。

最终,我想在 Excel 中使用 .RunMacro VBA 表达式调用此宏,这样最终用户就不必接触 MS Access DB。

归根结底,我只是在寻找一种从 Excel 运行上述代码的方法,因此如果有人能提供比修复此错误更好的解决方案,我对此持开放态度。

提前谢谢你!

【问题讨论】:

    标签: excel vba ms-access


    【解决方案1】:

    您需要将驻留在模块中的 Public Sub 更改为 Public Function(或只是 Function,因为 Public 是默认范围),以便能够从 RunCode 中对其进行评估MS Access 宏的操作。

    来自MS Access documentation:

    您可以使用 Access 桌面数据库中的 RunCode 宏操作 调用 Visual Basic for Applications (VBA) Function 过程。

    或者,您可以创建一个简单地调用您的 Sub 的函数,例如:

    Function Test()
        Call Command42_Click
    End Function
    

    然后从您的宏的RunCode 操作中调用此函数。

    【讨论】:

    • 感谢您的回复。 Access 宏现在可以工作了。我在 Excel 步骤中仍然遇到问题。代码在下面,它仍然告诉我它找不到它。我做错了什么?
    • Sub accessMacro() Dim appAccess As Access.Application Set appAccess = New Access.Application appAccess.OpenCurrentDatabase "Connection String" appAccess.Visible = True appAccess.DoCmd.RunMacro "Module2" '
    【解决方案2】:

    不要使用 DoCmd.RunMacro

    不要使用宏

    使用 appAccess.Run "MyNewModule.Command42_Click"

    .Run 的另一个优点是它运行子例程和函数。

    【讨论】:

      【解决方案3】:

      试试这个:

      1. 在设计模式下打开您的 RunCode 宏。
      2. 点击编辑函数名
      3. 按 Ctrl+F2 打开“表达式生成器”对话框
      4. 在表达式生成器中,导航到您的函数,单击数据库文件的名称、模块的名称,然后是函数的名称。

      起初我遇到了与您描述的相同的错误 2425。通过表达式生成器选择功能后,它运行顺利。 我的 Access 数据库文件具有 .mdb 扩展名。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-11-06
        • 1970-01-01
        • 2020-05-09
        • 1970-01-01
        • 2019-07-24
        • 2014-07-30
        • 2015-10-11
        相关资源
        最近更新 更多