Word VBA复制表格单元格链接时末尾右括号丢失问题求解
问题原因
Word表格单元格的默认Range范围会在可见内容末尾附带两个固定特殊字符:Chr(13)(段落标记)、Chr(7)(单元格结束标记)。
你用MoveEndWhile Chr(7) & Chr(13), wdBackward收缩范围时,因为Link域的结束右括号和这两个特殊字符位置紧邻,向后移动边界时会多收缩1个字符位置,刚好把域的结束右括号截掉,导致域结构不完整。
如果把方向改成wdForward,范围会向外扩展,把单元格结束标记甚至相邻区域的格式标记包含进来,写入目标位置时就会打乱原有排版。
修复方法
直接通过Range的End属性固定减2,精准排除单元格末尾的两个特殊标记即可,既不会截断有效内容,也不会带入多余格式标记。
修正后代码:
objTable.Cell(1, 1).Range.Text = "Link:" Dim rngTable As Range Set rngTable = ActiveDocument.Tables(2).Cell(1, 2).Range ' 排除单元格末尾固定的2个特殊标记 rngTable.End = rngTable.End - 2 ' 写入目标单元格 objTable.Cell(1, 2).Range.FormattedText = rngTable
注意事项
- 所有Word表格单元格的默认Range都比可见内容多2个字符长度,对应末尾两个固定特殊标记,直接减2的方式不受单元格内域、特殊符号、手动换行的影响,稳定性比Move类方法高。
- 调试时可以在范围收缩后执行
Debug.Print AscW(Right(rngTable.Text, 1)),如果返回值不是13或7,就说明范围收缩正确,没有包含多余特殊字符。
内容的提问来源于stack exchange,提问作者Trafel
相关产品推荐
相关产品推荐

