我正在编辑一个项目,并试图通过按钮单击一个窗体来运行当前运行的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运行上面的代码,所以如果有人可以提供更好的解决方案而不是修复此错误,我会对此持开放态度。
先感谢您!
您需要将Public Sub
更改为Public Function
(或只是Function
,因为Public是默认范围),它位于模块中,以便能够在MS Access宏的RunCode
操作中进行评估。
您可以使用Access桌面数据库中的
RunCode
宏操作来调用Visual Basic for Applications(VBA)函数过程。
或者,你可以创建一个简单地调用你的Sub
的函数,例如:
Function Test()
Call Command42_Click
End Function
然后从宏的RunCode
动作调用此函数。