我正在编辑一个项目,并尝试采用当前通过单击表单上的按钮来运行的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运行上述代码的方法,因此,如果有人可以提供比解决此错误更好的解决方案,那么我对此持开放态度。
提前谢谢!
答案 0 :(得分:1)
您需要将Public Sub
更改为模块中的Public Function
(或仅更改为Function
,因为Public是默认作用域),才能对其进行评估来自MS Access宏的RunCode
操作中。
您可以在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)
尝试一下:
起初,我遇到与您描述的相同的错误2425。通过表达式生成器选择函数后,它可以顺利运行。 我的Access数据库文件的扩展名为.mdb。