我正在编辑一个项目,并尝试接受一个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 form按钮中工作得很好,不需要编辑。
当我将此代码复制到独立模块并运行它时,它也能工作。
当我尝试在宏中调用新开发的模块时,我的问题就开始了。
我设置了一个运行代码步骤,输入新的函数名(例如,我将Command42_Click()更改为Test(),这就是我所调用的),然后它返回一个错误。
出现一个消息框,其文本声明:
“您输入的表达式有一个Microsoft找不到的函数名”
然后告诉我错误号是2425,参数"Test()"是找不到的。
最终,我想用Excel中的.RunMacro VBA表达式调用这个宏,这样最终用户就不必碰macro。
最后,我只是在寻找一种从Excel运行上面的代码的方法,所以如果有人能够提供一个比修复这个错误更好的解决方案,我是开放的。
提前谢谢你!
发布于 2019-02-28 18:13:59
您需要将您的Public Sub更改为Public Function (或者仅仅是Function,因为公共是模块中的默认作用域),以便能够在Macro的RunCode操作中对其进行评估。
可以在Access桌面数据库中使用
RunCode宏操作来调用(VBA) 函数过程。
或者,您可以创建一个简单地调用Sub的函数,例如:
Function Test()
Call Command42_Click
End Function然后从宏的RunCode操作调用此函数。
发布于 2019-11-27 22:53:04
不要使用DoCmd.RunMacro
不要使用宏
使用appAccess.Run "MyNewModule.Command42_Click“
.Run的另一个优点是它运行子例程和函数。
发布于 2020-12-14 09:08:05
试试这个:
一开始,我得到了您描述的相同的错误2425。在通过表达式生成器选择函数之后,它运行得很顺利。我的Access数据库文件有一个.mdb扩展名。
https://stackoverflow.com/questions/54930851
复制相似问题