只读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
相关产品推荐
相关产品推荐

