Excel VBA:用变量替代固定工作簿名调用Application.Run的正确语法
Application.Run 调用外部工作簿宏的正确变量写法
核心语法规则
使用Application.Run调用外部工作簿宏时,需传入**「完整工作簿名(含后缀)!宏名」**格式的字符串。用变量替代固定工作簿名时,要确保变量值是包含后缀的完整文件名(比如NewJersey.xlsm)。
正确代码示例
1. 获取变量值
先从指定单元格读取目标工作簿名:
Dim Sname1 As String ' 读取SelectPick3Games工作表Q30单元格的工作簿名(需包含.xlsm后缀) Sname1 = ThisWorkbook.Worksheets("SelectPick3Games").Range("Q30").Value
2. 调用目标宏
直接拼接字符串调用:
' 调用ClearPreviousResults1宏 Application.Run Sname1 & "!ClearPreviousResults1" ' 调用CopyStringsData1宏 Application.Run Sname1 & "!CopyStringsData1"
或者用命名参数写法(可读性更好,适合带参数的宏):
Application.Run Macro:=Sname1 & "!ClearPreviousResults1" Application.Run Macro:=Sname1 & "!CopyStringsData1"
关键注意事项
- 确保目标工作簿已打开:如果未打开,需先检查并打开,示例代码:
Dim targetWb As Workbook On Error Resume Next Set targetWb = Workbooks(Sname1) On Error GoTo 0 ' 若工作簿未打开,则打开(替换为实际文件路径) If targetWb Is Nothing Then Set targetWb = Workbooks.Open("C:\YourTargetFolder\" & Sname1) End If
- 变量必须带完整后缀:比如
Sname1的值必须是NewJersey.xlsm,不能只写NewJersey,否则会找不到宏 - 目标宏需为公共宏:目标工作簿中的
ClearPreviousResults1和CopyStringsData1必须是Public类型,不能是Private,否则无法跨工作簿调用
内容的提问来源于stack exchange,提问作者Steve
相关产品推荐
相关产品推荐

