通过宏运行MS Access 2016 VBA功能,然后通过Excel运行该宏

问题描述 投票:0回答:1

我正在编辑一个项目,并试图通过按钮单击一个窗体来运行当前运行的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重复了“数据下载”步骤。

此代码在“访问表单”按钮中运行良好,无需编辑。

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

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

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

将出现一个消息框,其中包含文本说明:

“您输入的表达式具有Microsoft Access无法找到的函数名称”

然后告诉我错误号码是2425,而且"Test()"这个论点是无法找到的。

最后,我想在Excel中使用.RunMacro VBA表达式调用此宏,以便最终用户永远不必触摸MS Access DB。

在一天结束时,我只是想找到一种方法从Excel运行上面的代码,所以如果有人可以提供更好的解决方案而不是修复此错误,我会对此持开放态度。

先感谢您!

excel vba ms-access access-vba
1个回答
1
投票

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

来自MS Access documentation

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

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

Function Test()
    Call Command42_Click
End Function

然后从宏的RunCode动作调用此函数。

© www.soinside.com 2019 - 2024. All rights reserved.