如何 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有没有办法只选择光标位置到当前段落的开头?
请随时提出更好的方法。
是的,这是可能的。有多种方法可以解决这个问题,但一个相当直接的方法是使用 Range
或 Selection
对象的 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
我正在格式化大型文档中特定类型的名称。正确的格式是“术语名称 (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有没有办法只选择光标位置到当前段落的开头?
请随时提出更好的方法。
是的,这是可能的。有多种方法可以解决这个问题,但一个相当直接的方法是使用 Range
或 Selection
对象的 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