Word 2007运行邮件合并导出PDF宏报Error 4608值超出范围如何解决
错误原因
- Word 2007对Range对象的入参校验逻辑更严格,要求范围的起始位置必须≥1,不接受≤0的数值。你的原有代码中,如果邮件合并生成的目标文档本身只有1页,
.GoTo(wdGoToPage, wdGoToLast).Start返回的起始位置为1,计算Lr - 1后得到0,传入Range方法就会触发4608值超出范围错误。高版本Word对起始位置为0的异常场景做了兼容处理,所以不会报错。 - 另一种触发场景是部分记录生成的文档末尾本身没有多余空白内容,直接执行删除末尾范围操作也会触发边界越界错误。
修复方案
将原有删除空白页的代码块替换为如下兼容版本即可,该代码适配Word 2007及所有更高版本,同时不会影响原有功能逻辑:
原有代码段:
With TargetDoc Lr = .GoTo(wdGoToPage, wdGoToLast).Start .Range(Lr - 1, TargetDoc.Range.End).Delete End With
替换为:
With TargetDoc Dim totalPage As Long totalPage = .ComputeStatistics(wdStatisticPages) ' 多页文档的空白页删除逻辑 If totalPage > 1 Then Lr = .GoTo(wdGoToPage, wdGoToLast).Start ' 校验范围合法性后再执行删除 If Lr > 1 Then .Range(Lr - 1, .Range.End).Delete End If Else ' 单页文档仅清理末尾多余的空白段落、分页符 Dim lastPara As Range Set lastPara = .Paragraphs.Last.Range Do While lastPara.Text = Chr(13) Or lastPara.Text = Chr(12) lastPara.Delete Set lastPara = .Paragraphs.Last.Range ' 避免内容全为空时死循环,保留至少1个段落标记 If .Paragraphs.Count = 1 Then Exit Do Loop End If End With
内容的提问来源于stack exchange,提问作者Sonal
相关产品推荐
相关产品推荐

