Excel 2016 for Mac宏运行时错误1004求助(原2011可正常运行)
解决Excel 2016 for Mac宏Run-time Error '1004'的问题
这个问题根源在于Excel 2016 for Mac对AppleScript的路径处理、文件类型识别逻辑和2011版本存在差异,原来的代码里有几个关键细节需要调整:
- 文件类型范围太窄:原代码只指定了
.xls格式,Excel 2016默认常用.xlsx/.xlsm,会导致部分文件无法被选中或识别 - 路径格式不兼容:原AppleScript返回的是Mac风格冒号分隔路径,Excel 2016更适配POSIX斜杠分隔路径,直接使用会触发找不到文件的错误
- 多选分隔符易出错:用逗号分割路径时,若文件名包含空格会被错误拆分,改用换行符更可靠
下面是可以直接替换的完整修复代码:
On Error Resume Next ' 获取Documents文件夹的POSIX斜杠路径 MyPath = MacScript("return POSIX path of (path to documents folder)") MyScript = _ "set selectedFiles to choose file of type " & _ " {""com.microsoft.Excel.xls"", ""com.microsoft.Excel.xlsx"", ""com.microsoft.Excel.xlsm""} " & _ "with prompt ""Please select a file or files"" default location alias """ & _ MyPath & """ multiple selections allowed true" & vbNewLine & _ "set posixPaths to {}" & vbNewLine & _ "repeat with aFile in selectedFiles" & vbNewLine & _ " set end of posixPaths to POSIX path of aFile" & vbNewLine & _ "end repeat" & vbNewLine & _ "return join posixPaths using linefeed" MyFiles = MacScript(MyScript) On Error GoTo 0 If MyFiles <> "" Then With Application .ScreenUpdating = False .EnableEvents = False End With ' 用换行符分割路径,避免空格文件名导致的错误拆分 MySplit = Split(MyFiles, vbLf) For N = LBound(MySplit) To UBound(MySplit) X = ActiveWorkbook.Name ' 使用POSIX路径直接打开文件 Workbooks.Open (MySplit(N)) ' 这里可以保留你原来的后续处理逻辑 Next N ' 恢复Excel默认设置 With Application .ScreenUpdating = True .EnableEvents = True End With End If
核心修改说明:
- 扩展文件类型:新增
.xlsx和.xlsm的类型标识符,覆盖Excel主流文件格式,避免选文件时看不到新格式文件 - POSIX路径转换:在AppleScript中把选中文件统一转换成POSIX路径,确保Excel 2016能正确识别路径
- 分隔符优化:用换行符
vbLf替代逗号作为多选文件的分隔符,彻底解决含空格文件名的拆分问题 - 恢复默认设置:循环结束后恢复
ScreenUpdating和EnableEvents,避免影响Excel后续操作
你可以先测试单个文件的打开情况,再验证多选场景,应该就能解决Run-time Error '1004'的问题了。
内容的提问来源于stack exchange,提问作者Shoujiki
相关产品推荐
相关产品推荐

