【发布时间】:2019-01-28 12:22:43
【问题描述】:
红色的段落结尾标记是一个插入段落结尾标记。(使'track changes ON'>将光标放在第一段的末尾>按Enter>插入新的段落内容>格式风格不同)
我需要为插入添加一个字段,其中包含文本“插入”+ 插入文本。 (此过程中的输出文档会经过一些其他过程(不是在 VBA 中),所以为了让 其他进程“这是一个插入”,我们正在添加该字段)
Public Sub main()
Dim objRange As Word.Range
Set objRange = Word.ActiveDocument.Range
TrackInsertions objRange
End Sub
Public Sub TrackInsertions(WordRange As Word.Range)
Dim objRevision As Word.Revision
Dim objContentControl As Word.ContentControl
Dim objRange As Word.Range
With WordRange
For Each objRevision In .Revisions
If AllowTrackChangesForInsertion(objRevision) = True Then
On Error Resume Next
With objRevision
Set objRange = .Range
.Range.Font.Underline = wdUnderlineSingle
.Range.Font.ColorIndex = wdRed
Set objField = objRange.Fields.Add(Range:=objRange, Type:=wdFieldComments, Text:="Insertion " + objRange.Text, PreserveFormatting:=False)
.Accept
End With
Err.Clear
End If
Next objRevision
End With
End Sub
Private Function AllowTrackChangesForInsertion(ByRef Revision As Word.Revision) As Boolean
With Revision
Select Case .Type
Case wdRevisionInsert, wdRevisionMovedFrom, wdRevisionMovedTo, wdRevisionParagraphNumber, wdRevisionStyle
AllowTrackChangesForInsertion = IsTextChangeExist(.Range)
Case Else
AllowTrackChangesForInsertion = False
End Select
End With
End Function
Private Function IsTextChangeExist(ByRef Range As Word.Range) As Boolean
'False if the range contain inlineshapes, word fields and tables
Select Case True
Case Range.InlineShapes.Count > 0
IsTextChangeExist = False
Case Range.Fields.Count > 0
IsTextChangeExist = False
Case Range.Tables.Count > 0
IsTextChangeExist = False
Case Else
IsTextChangeExist = True
End Select
End Function
问题是,何时进行上述更改,插入文本的第二段 (我这里没有把段落结束标记算作段落) 第一段变成了一段。 在此代码部分中,实际段落数会减少, 最终输出(通过其他应用程序运行后)还包含减少的段落数,这就是问题所在。
当我们通读修订版时,红色段落结束标记+第二段作为一个修订版。 即使该修订版有多个段落,它也是一个修订版。 如果我们对插入的段落应用了单独的段落样式,则在运行此代码后,修订版获得了一种样式,即立即 段落的风格。这一切都是因为那个插入的段落结束标记。
我尝试遍历单词段落,因为我想要避免更改文档中的段落数。 (尝试从下到上,从上到下)但这并没有解决我的问题。
我也曾尝试将修订版分成两个修订版,当
If objParagraph.End < objRevision.Range.End Then
.....
End If
但我无法将范围应用于新版本。
现在,如果我们在内容中识别出段落结尾标记,我想将修订分成几部分,并分别应用 如果可能的话。因此,添加字段后,段落计数和段落样式都不会改变。
或者,有没有办法接受所有被标记为插入到 word 文档中的段落结尾标记(仅)?
谁能帮我继续编写代码,如果你有其他想法,请告诉我。
提前谢谢你。
【问题讨论】:
-
@CindyMeister 我使用了'Set objRange = .Range',因为在字段中添加部分更容易,因为我们不想到处重复 objRevision.Range。那是它的唯一用途。现在我更改了问题的内容,删除了不必要的代码。行,并带有可运行的代码示例。我希望现在您可以对这个问题有所了解。谢谢。
-
@CindyMeister 有没有办法修改此解决方案以匹配任何用户案例?例如:修订不以段落结尾标记开始,修订包含具有单独应用样式的多个段落(因此其中有多个段落结尾标记)。请帮我解决这个问题。