Vba 修改表格单元格的.Range.Text将删除任何附加注释
我已经编写了一个小的VBA程序来删除MS Word表格单元格中的尾随空格。它遍历每个表的所有单元格,并使用命令修改它们的.Range.Text对象Vba 修改表格单元格的.Range.Text将删除任何附加注释,vba,replace,ms-word,Vba,Replace,Ms Word,我已经编写了一个小的VBA程序来删除MS Word表格单元格中的尾随空格。它遍历每个表的所有单元格,并使用命令修改它们的.Range.Text对象 C.Range.Text = myRE.Replace(C.Range.Text, "") 其中myRE是一个VBScript RegExp 5.5对象,myRE.Pattern=\s+*\W整个程序都可以找到 除了一个问题外,该程序运行良好。它还将删除单元格中的所有注释。之前: 多余的空间消失后,评论也消失了: 查看本地对象树,我可以看到更改C.
C.Range.Text = myRE.Replace(C.Range.Text, "")
其中myRE是一个VBScript RegExp 5.5对象,myRE.Pattern=\s+*\W整个程序都可以找到
除了一个问题外,该程序运行良好。它还将删除单元格中的所有注释。之前:
多余的空间消失后,评论也消失了:
查看本地对象树,我可以看到更改C.Range.Text也会更改C.Range.Comments-但为什么
如何防止出现这种情况?当使用Range.Text时,就像使用正则表达式或任何处理字符串的函数时一样,当纯字符串写回单元格时,所有格式和其他非文本字符都会丢失 例如,如果单元格文本中的单个字符的格式为粗体,粗体格式将丢失。或者,如果单元格中有更改跟踪,则会丢失。任何脚注或尾注都将丢失。评论也属于这一类 您需要一种不同的方法,一种尊重Word如何在文档中存储非文本信息的方法。这里有一个建议,即循环表中的单元格,在单元格末尾提取范围,然后只要找到预定义的空白字符,就将范围的起点向后移动。当不再满足此标准时,该范围将被删除。注意我不知道为什么我需要使用范围。删除两次-第一次没有效果 你需要弄清楚什么是空白。我使用了空格、回车符和制表符。您当然可以向sWhitespace字符串添加其他字符串
Sub RemoveWhiteSpaceEndOfCell()
Dim cel As word.Cell
Dim sWhitespace As String
Dim rng As word.Range
Dim lWhiteSpaceChars As Long
'define what constitutes Whitespace.
'Here: a space, a carriage return and a tab
sWhitespace = Chr(32) & Chr(13) & Chr(9)
For Each cel In ActiveDocument.Tables(1).Range.Cells
Set rng = cel.Range
'set the Range to the end of the cell
rng.Collapse wdCollapseEnd
rng.MoveEnd wdCharacter, -1
'move the starting point back as long as whitespace is found
lWhiteSpaceChars = rng.MoveStartWhile(sWhitespace, wdBackward)
'Only if whitespace was found, delete the range
If lWhiteSpaceChars <> 0 Then
'rng.Select 'For debugging purposes
rng.Delete
rng.Delete
End If
Next
End Sub
您可以手动将注释应用于空单元格吗?可以。不过,我的单元格不是空的。Word将格式和额外信息与文本内联存储,即使文本不容易看到,所以在删除/替换文本时需要小心。向空单元格中添加评论,然后选择整个单元格,然后按delete键,将删除该单元格中的评论。投票人对我如何提出更好的问题有何评论?