Solidworks PDM传参启动Excel追加xlsx后缀报错原因及解决方法
报错触发原因
报错完全由PDM中配置的执行命令行格式错误导致:
- Excel程序路径与xlsm宏文件路径之间缺少半角空格,两个连续的双引号造成命令行解析异常
- Excel原生启动参数
/e被误写为/e/,多余斜杠导致参数失效,Excel将后续传入的%FolderPath%识别为待打开的工作簿路径,自动为其拼接.xlsx后缀尝试加载,因文件不存在触发弹窗。
宏能正常执行是因为Excel加载优先级为:先打开指定的xlsm文件并触发Workbook_Open事件,宏逻辑全部执行完成后才会处理后续被误识别的待打开路径,因此呈现宏运行正常、结束后才弹错的现象。
解决方案
根因修复(优先使用):修正PDM执行命令行
将原有错误命令行替换为以下半角符号格式的内容:
"C:\Program Files (x86)\Microsoft Office\Root\Office16\EXCEL.EXE" "C:\Users\guy\Desktop\TEST FOLDER RENAME.xlsm" /e "%FolderPath%"
修正点说明:
- 在EXCEL.EXE路径的闭合双引号和xlsm文件路径的开头双引号之间添加半角空格,保证命令行参数分隔正确
- 删除
/e参数后多余的斜杠,恢复该参数原生作用:启动Excel时不加载启动页、不新建空白工作簿,后续传入的字符串会作为命令行参数传递给宏,不会被识别为待打开文件 - 给
%FolderPath%变量外层包裹半角双引号,避免后续文件夹路径包含空格时被拆分为多个参数触发其他异常
兜底方案:宏层面增加报错抑制
如果修正命令行后仍偶发弹窗,可以在xlsm文件的Workbook_Open事件中增加告警抑制和错误捕获逻辑,示例代码结构如下:
Private Sub Workbook_Open() ' 关闭系统告警弹窗 Application.DisplayAlerts = False On Error Resume Next ' 原有接收路径、执行业务逻辑的代码放置区域 Dim targetFolder As String targetFolder = Command() ' 读取命令行传入的%FolderPath%参数 ' 原有业务逻辑 ' 恢复系统告警默认配置 Application.DisplayAlerts = True On Error GoTo 0 End Sub
该配置会直接屏蔽Excel运行过程中的非致命错误弹窗,不会影响宏本身的逻辑执行。
内容的提问来源于stack exchange,提问作者CodeWriter
相关产品推荐
相关产品推荐

