通过宏运行MS Access 2016 VBA函数,然后通过Excel运行该宏

时间:2019-02-28 17:07:23

标签: excel vba ms-access access-vba

我正在编辑一个项目,并尝试采用当前通过单击表单上的按钮来运行的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运行上述代码的方法,因此,如果有人可以提供比解决此错误更好的解决方案,那么我对此持开放态度。

提前谢谢!

3 个答案:

答案 0 :(得分:1)

您需要将Public Sub更改为模块中的Public Function(或仅更改为Function,因为Public是默认作用域),才能对其进行评估来自MS Access宏的RunCode操作中。

来自MS Access documentation

  

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

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

Function Test()
    Call Command42_Click
End Function

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

答案 1 :(得分:0)

不要使用DoCmd.RunMacro

不要使用宏

使用appAccess。运行“ MyNewModule.Command42_Click”

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

答案 2 :(得分:0)

尝试一下:

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

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