You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

只读Word宏文件另存时触发Run-Time error 5155问题求助

解决Word只读文件宏保存报错问题

问题根源

你的代码里ActiveDocument.Save在只读文件上执行时,Word会尝试覆盖原只读文件,这直接触发5155错误——哪怕系统弹出了另存为对话框让你手动保存,宏代码本身已经因为错误终止了。

修正方案

要实现“必须先另存为自定义名称”的要求,应该直接调用另存为方法,强制用户保存新文件,避免触发只读保存错误。修改后的代码如下:

Private Sub CommandButton1_Click()
    Dim objOutlook As Object
    Dim objOutlookMsg As Object
    Dim objInspector As Object
    Dim objDoc As Word.Document
    Dim objRange As Range
    Dim sDocname As String
    Dim saveResult As Integer
    
    ' 如果当前文档是只读状态,或者从未保存过,触发另存为
    If ActiveDocument.ReadOnly Or Len(ActiveDocument.Path) = 0 Then
        ' 弹出另存为对话框,让用户选择保存路径和名称
        saveResult = Dialogs(wdDialogFileSaveAs).Show
        
        ' 如果用户取消了另存,终止代码
        If saveResult = 0 Then
            MsgBox "未完成文件保存,操作终止。"
            GoTo lbl_Exit
        End If
    Else
        ' 非只读文件直接保存
        ActiveDocument.Save
    End If
    
    ' 获取保存后的文件完整路径
    sDocname = ActiveDocument.FullName
    
    ' 后续发送邮件的代码放在这里
    
lbl_Exit:
    ' 清理对象(如果需要)
    Set objDoc = Nothing
    Set objRange = Nothing
    Set objOutlookMsg = Nothing
    Set objOutlook = Nothing
End Sub

关键说明

  • Dialogs(wdDialogFileSaveAs).Show:调用Word自带的另存为对话框,用户必须选择保存路径和名称(或者取消),返回0代表用户取消操作,非0代表保存成功。
  • 先判断ActiveDocument.ReadOnly:确保只读文件必须走另存流程,避免直接保存触发错误。
  • 处理用户取消的情况:避免代码在未保存状态下继续执行后续邮件逻辑。

内容的提问来源于stack exchange,提问作者Matthew Redhouse

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 00:47:39