无链接调用其他工作簿宏触发‘expected sub/function’错误求协助
解决VBA中Application.Run触发"expected sub/function"错误的问题
嘿,我来帮你搞定这个报错!你遇到的「expected sub/function」错误,通常是调用宏时的几个细节没处理好,咱们一个个排查:
1. 最常见的原因:目标工作簿没打开
你的代码直接调用了宏,但如果6wk File to Run.xlsm没在当前Excel实例中打开,Application.Run根本找不到这个宏,自然会报错。咱们先把工作簿打开逻辑补上:
修改后的代码如下:
Sub practice() Const folderPath As String = "I:\Ben\New Stores\Reports" Const targetWBName As String = "6wk File to Run.xlsm" Dim fso As FileSystemObject Set fso = New FileSystemObject Dim targetWBPath As String Dim targetWB As Workbook ' 拼接完整的工作簿路径 targetWBPath = fso.BuildPath(folderPath, targetWBName) ' 先检查工作簿是否已经打开 On Error Resume Next Set targetWB = Workbooks(targetWBName) On Error GoTo 0 ' 如果没打开,就打开它 If targetWB Is Nothing Then Set targetWB = Workbooks.Open(targetWBPath) End If ' 再调用宏 Application.Run "'" & targetWBName & "'!button2_click" End Sub
2. 宏的可见性或名称有问题
- 确认
button2_click是公共Sub:如果这个宏是用Private Sub button2_click()定义的,外部代码根本调用不到,得改成Public Sub button2_click()。 - 核对宏名称拼写:虽然VBA不区分大小写,但最好确保和目标工作簿里的宏名称完全一致,别打错字。
3. 宏在工作表模块里?要加工作表名
如果button2_click是写在某个工作表的模块里(比如Sheet1的代码窗口),调用时必须加上工作表名称,格式是:
Application.Run "'6wk File to Run.xlsm'!Sheet1.button2_click"
把Sheet1换成实际的工作表名称就行。
先按这几个步骤排查,应该就能解决问题啦!
内容的提问来源于stack exchange,提问作者The Dude MAN
相关产品推荐
相关产品推荐

