Word宏中使用Table.Cell.Range.Text获取单元格文本时自动添加换行的问题
解决Word VBA复制表格单元格文本时自动添加换行符的问题
你遇到的这个问题其实是Word表格单元格的默认特性导致的:当你使用Cell.Range.Text获取单元格内容时,返回的文本末尾会包含一个单元格结束标记(由Chr(13)+Chr(7)组成,看起来像换行符),这是Word用来标识单元格边界的特殊字符,所以复制到新单元格时就会带上这个多余的换行。
方法一:截断文本去掉末尾的结束标记
你可以通过Left函数截取文本的前Len(text)-2个字符(因为结束标记占2个字符),这样就能得到纯文本内容。修改你的代码如下:
Sub tabele_trasfer() ' tabele_trasfer Macro Dim docCurrent As Document Dim docNew As Document Dim myRange As Range Dim cellText As String ' 新增变量存储处理后的文本 Set docCurrent = ActiveDocument Set docNew = Documents.Add Set myRange = docNew.Range(0, 0) docNew.Tables.Add Range:=myRange, NumRows:=docCurrent.Tables(5).Rows.Count, NumColumns:=docCurrent.Tables(5).Columns.Count For i = 1 To docCurrent.Tables(5).Rows.Count ' 获取原单元格文本并去掉末尾的结束标记 cellText = docCurrent.Tables(5).Cell(i, 2).Range.Text cellText = Left(cellText, Len(cellText) - 2) ' 赋值到新表格的单元格 docNew.Tables(1).Cell(Row:=i, Column:=1).Range.Text = cellText docNew.Tables(1).Cell(Row:=i, Column:=2).Range.Text = cellText Next i End Sub
方法二:使用FormattedText保留格式同时避免多余换行
如果你的单元格内容包含格式(比如字体、颜色等),更推荐使用Range.FormattedText来复制,它会完整保留格式,并且不会带入多余的单元格结束标记:
Sub tabele_trasfer() ' tabele_trasfer Macro Dim docCurrent As Document Dim docNew As Document Dim myRange As Range Set docCurrent = ActiveDocument Set docNew = Documents.Add Set myRange = docNew.Range(0, 0) docNew.Tables.Add Range:=myRange, NumRows:=docCurrent.Tables(5).Rows.Count, NumColumns:=docCurrent.Tables(5).Columns.Count For i = 1 To docCurrent.Tables(5).Rows.Count ' 直接复制格式和内容,无多余换行 docNew.Tables(1).Cell(Row:=i, Column:=1).Range.FormattedText = docCurrent.Tables(5).Cell(i, 2).Range.FormattedText docNew.Tables(1).Cell(Row:=i, Column:=2).Range.FormattedText = docCurrent.Tables(5).Cell(i, 2).Range.FormattedText Next i End Sub
补充说明
- 单元格结束标记
Chr(13)+Chr(7)是Word表格的内部标识,不会在文档中显示,但通过Range.Text获取时会被包含进去。 - 如果只需要纯文本,方法一更高效;如果需要保留格式,方法二更合适。
内容的提问来源于stack exchange,提问作者vikash vishnu
相关产品推荐
相关产品推荐

