如何 select 从光标位置到段落开头的文本 VBA

How do I select text from the cursor position to the begining of a paragraph with VBA

我正在格式化大型文档中特定类型的名称。正确的格式是“术语名称 (REC) [日期]”,其中除日期外整个短语均以斜体显示。我目前正在使用以下代码:

Selection.Find.ClearFormatting
    Selection.Find.Replacement.ClearFormatting
        With Selection.Find
            .Text = "(REC)"
            .Replacement.Text = "*"
            .Forward = True
            .Wrap = wdFindStop
            .Format = True
            .MatchCase = False
            .MatchWholeWord = False
            .MatchWildcards = False
            .MatchSoundsLike = False
            .MatchAllWordForms = False
        End With
        Do While Selection.Find.Execute = True
            Selection.MoveRight Unit:=wdCharacter, Count:=1
            Selection.HomeKey Unit:=wdLine, Extend:=wdExtend
            Selection.Font.Italic = wdToggle
            Selection.EndKey Unit:=wdLine, Extend:=wdMove
        Loop

除非斜体字超过两行,否则这很好用。我得到如下内容: "术语名称术语术语术语术语
Term Term Term (REC) [日期]"
第一行没有斜体。 VBA有没有办法只选择光标位置到当前段落的开头?
请随时提出更好的方法。

是的,这是可能的。有多种方法可以解决这个问题,但一个相当直接的方法是使用 RangeSelection 对象的 MoveStart 方法。

就我个人而言,我更喜欢使用 Range 而不是 Selection,因为它更灵活、更快而且 "screen flicker" 更少。但是下面显示的方法对两者都适用,只是一样。

Dim rngFind As Range

Set rngFind = ActiveDocument.Content 'search the document body

rngFind.Find.ClearFormatting
rngFind.Find.Replacement.ClearFormatting
    With rngFind.Find
        .Text = "(REC)"
        .Replacement.Text = "*"
        .Forward = True
        .Wrap = wdFindStop
        .Format = True
        .MatchCase = False
        .MatchWholeWord = False
        .MatchWildcards = False
        .MatchSoundsLike = False
        .MatchAllWordForms = False
    End With
    Do While rngFind.Find.Execute = True
        rngFind.MoveRight Unit:=wdCharacter, Count:=1
        rngFind.MoveStart Unit:=wdParagraph, Count:=-1
        rngFind.Font.Italic = wdToggle
        rngFind.Collapse wdCollapseEnd
    Loop

这将选择从插入点到段落开头的所有内容。这在文档的开头不起作用,因为前面没有 return:

Selection.MoveStartUntil Cset:=vbCr, Count:=wdBackward