我在Word中有一个编号列表,每次输入后都有一个段落标记。最后,在段落标记之后,有一个引号”
。我想从编号列表中删除最后一个段落标记,以便将引号放在编号列表的最后一行旁边。但是,对"^p" & ChrW(8220)
使用“查找并替换”会删除该段落,但也会删除最后一个条目的编号。
我设法通过选择引号,左移一个字符然后删除一个字符来解决问题。但是,它是不一致的,我不相信它是可靠的。
Selection.Find.ClearFormatting
With Selection.Find
.Text = ChrW(8220)
.Forward = True
.Wrap = wdFindContinue
.Format = False
.MatchCase = False
.MatchWholeWord = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
End With
Selection.Find.Execute
Selection.MoveLeft Unit:=wdCharacter, Count:=1
Selection.TypeBackspace
是否有另一种方法可以将引号放在最后一个条目的旁边而不破坏编号?
答案 0 :(得分:1)
可以通过多种方式完成此操作;使用哪种方法主要取决于个人喜好。这是两个。一个使用通配符查找替换。另一个操作Range
对象。第一个执行速度可能更快(尽管在这种情况下不会很明显),并且在Word的“撤消”列表中仅留下一个“足迹”。
注意:我更喜欢使用Range
而不是Selection
。第一个选项可以用Selection
完成;第二种方法是使用Range
更好。
这使得反向替换信息成为可能:引号位于段落标记之前-段落标记保持完整(子弹未丢失)。
Sub TestFindParaAndQuote()
Dim rngFind As Word.Range
Set rngFind = ActiveDocument.content
rngFind.Find.ClearFormatting
With rngFind.Find
.Text = "(^13)(" & ChrW(8220) & ")"
.Replacement.Text = "\2\1"
.Forward = True
.wrap = wdFindStop
.Format = False
.MatchCase = False
.MatchWholeWord = False
.MatchWildcards = True
.MatchSoundsLike = False
.MatchAllWordForms = False
.Execute Replace:=wdReplaceOne
End With
End Sub
Find.Execute
成功时,Range
(或Selection
)将移至找到的项。在这里,如果bFound = True
,则:1)将引号插入Range
之前; 2)Range
折叠到其端点(在原始引号之后); 3)然后向后扩展以包括该报价; 4),并删除整个Range
。 (如果还应删除原始引号后面的段落,则可以包括注释掉的以下行。)当标准的“查找/替换”由于某种原因而无法执行此工作时,该示例有助于理解如何使用Find
。
Sub TestFindParaAndQuote()
Dim rngFind As Word.Range
Dim bFound As Boolean
Set rngFind = ActiveDocument.content
rngFind.Find.ClearFormatting
With rngFind.Find
.Text = "^p" & ChrW(8220)
.Forward = True
.wrap = wdFindStop
.Format = False
.MatchCase = False
.MatchWholeWord = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
bFound = .Execute
If bFound Then
rngFind.InsertBefore ChrW(8220)
rngFind.Collapse wdCollapseEnd
rngFind.MoveStart wdCharacter, -1
'rngFind.MoveEnd wdCharacter, 1 'use this, too, if the paragraph mark should be removed
'rngFind.Select 'for testing purposes
rngFind.Delete
End If
End With
End Sub
答案 1 :(得分:0)
如果您在右引号之前删除段落标记,则列表的最后一个段落将继承其后一段的格式。
如果列表已使用数字样式设置格式,则可以将该样式应用于包含引号的段落,然后再删除前面的段落标记。
如果不是这样,对您来说将更加困难。您可以尝试在列表的最后一个段落中添加引号,然后删除最后一个段落,但是如果它是文档中的最后一个段落,则可能不起作用。