从Excel调用带参数的Word VBA宏的语法问题
从Excel调用Word带参数宏的问题解决方法
我有一个带宏的Word文件,宏在Word内测试正常,需要传入一个参数(标识调用来源是Word还是Excel)来执行不同逻辑。之前无参数时,用以下代码能正常运行:
'objW.Run "'" & d.FullName & "!" & MacroName 'This worked when the Macro did not have any parameters...
现在试了7种带参数的调用写法都失败:
Callcode = "Excel" MacroName = "GetCodedData" 'objW.Run "'" & d.FullName & "!" & MacroName , & Callcode 'Version 1 'objW.Run ("'" & d.FullName & "!" & MacroName ", " & Callcode) 'Version 2 'objW.Run ("'" & d.FullName & "!" & MacroName, Callcode) 'Version 3 'objW.Run "'" & d.FullName & "!" & MacroName(Callcode) 'Version 4 'objW.Run "'" & d.FullName & "!" & MacroName "("Callcode")" 'Version 5 'objW.Run "'" & d.FullName & "!" & MacroName & "(" & Callcode & ")" 'Version 6 'objW.Run "'" & d.FullName & "!" & MacroName, varg1:=Callcode 'Version 7
各版本错误情况:
- 版本1、2、3、5:编译错误
- 版本4:运行时错误13(类型不匹配,但变量声明与宏匹配)
- 版本6:提示“无法运行指定宏”
- 版本7:错误438
正确的调用写法
把宏名称带路径作为第一个参数,后续参数直接跟在后面即可,不需要拼接进字符串里。正确代码如下:
objW.Run "'" & d.FullName & "!" & MacroName, Callcode
错误原因分析
- 版本1:
Callcode前多了一个多余的&,属于语法错误 - 版本2:错误地把参数拼进宏路径字符串,
Run方法不识别这种格式 - 版本3:括号使用错误,
Run方法的参数不需要整体用括号包裹(除非要接收返回值) - 版本4:把参数写在宏名称后的括号里,相当于提前执行宏调用,而非传递参数给
Run方法 - 版本5:字符串拼接缺少
&连接符,且错误将参数拼进宏路径 - 版本6:把参数拼进宏名称字符串,
Run会把GetCodedData(Excel)当作完整宏名,自然找不到对应宏 - 版本7:
varg1不是Run方法的命名参数,Run采用位置参数传递,无需指定参数名
额外注意事项
- 确保Word宏的参数声明正确,示例定义如下:
Sub GetCodedData(Callcode As String) ' 宏逻辑代码 End Sub
- 如果Word文件路径包含空格,当前用单引号包裹路径的写法是正确的,可避免空格导致的识别问题
内容的提问来源于stack exchange,提问作者PLL
相关产品推荐
相关产品推荐

