求助:为SolidWorks存PDF宏添加只读文件检查功能
解决SolidWorks宏因只读PDF文件崩溃的问题
原宏功能为将当前SolidWorks工程图保存为同路径、同名的PDF文件,但存在缺陷:当目标路径下已存在只读状态的PDF文件时,宏会陷入无响应,最终导致SolidWorks崩溃,用户被迫强制退出并丢失未保存修改。
以下是添加了只读文件检查功能的修改版宏代码:
Dim swApp As SldWorks.SldWorks Dim Part As SldWorks.ModelDoc2 Sub main() Set swApp = Application.SldWorks Set Part = swApp.ActiveDoc ' 检查是否有活动文档 If Part Is Nothing Then MsgBox "未找到活动文档!", vbExclamation Exit Sub End If Dim FilePath As String Dim PathSize As Long Dim PathNoExtension As String Dim NewFilePath As String FilePath = Part.GetPathName ' 检查文档是否已保存(无路径无法生成PDF目标路径) If FilePath = "" Then MsgBox "请先保存当前文档!", vbExclamation Exit Sub End If PathSize = Strings.Len(FilePath) PathNoExtension = Strings.Left(FilePath, PathSize - 6) NewFilePath = PathNoExtension & "pdf" ' 检查目标PDF是否存在且为只读 If Dir(NewFilePath) <> "" Then If (GetAttr(NewFilePath) And vbReadOnly) = vbReadOnly Then MsgBox "File is read only", vbCritical Exit Sub ' 终止宏运行 End If End If On Error Resume Next Part.SaveAs2 NewFilePath, 0, True, False ' 可选:提示保存失败原因 If Err.Number <> 0 Then MsgBox "PDF保存失败: " & Err.Description, vbCritical End If End Sub
关键修改说明:
- 添加活动文档校验:避免无打开文档时宏报错
- 添加文档保存状态校验:未保存的文档无路径,无法生成PDF目标路径
- 新增只读文件检测逻辑:
- 用
Dir(NewFilePath)判断目标PDF是否存在 - 用
GetAttr(NewFilePath) And vbReadOnly判断文件是否为只读 - 检测到只读时弹窗提示,并通过
Exit Sub终止宏
- 用
- 保留错误捕获并新增保存失败提示,方便排查其他异常
内容的提问来源于stack exchange,提问作者Adrian Crisci
相关产品推荐
相关产品推荐

