首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >从文档开头查找和替换,但将光标返回到上一位置

从文档开头查找和替换,但将光标返回到上一位置
EN

Stack Overflow用户
提问于 2019-02-22 02:16:32
回答 2查看 326关注 0票数 1

我有一个查找和替换宏,当缺少一个句子时,它在一个句子的结尾和另一个句子的开头之间添加一个空格。当我在word中移动句子时,有时会发生这种情况。

我注意到,如果光标位于标点符号的任意一侧,宏就看不到查找模式,也不会对其进行修复。我认为这是因为查找和替换从光标位置开始搜索。有没有办法调整代码,让它也能找到它们?

我知道我可以告诉宏从头开始,但我更希望它将光标留在它的当前位置,特别是当我在一个长文档的末尾运行它时。

代码语言:javascript
复制
Sub AddOneSpaceBetweenSentences()
' AddOneSpaceBetweenSentences Macro
'
 With Selection.Find
 .Forward = True
 .Text = "(?)([.\?\!])([A-Z])"
 .ClearFormatting
 .Replacement.Text = "\1\2 \3" 'there is a space between \2 and \3
 .MatchWildcards = True
 .Wrap = wdFindContinue
 .Execute Replace:=wdReplaceAll

End With

End Sub
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-02-24 05:06:33

更好的是:

代码语言:javascript
复制
Sub AddOneSpaceBetweenSentences()
Application.ScreenUpdating = False
With ActiveDocument.Range.Find
  .ClearFormatting
  .Replacement.ClearFormatting
  .Forward = True
  .Format = False
  .MatchWildcards = True
  .Wrap = wdFindContinue
  .Text = "([.\?\!])([A-Z])"
  .Replacement.Text = "\1 \2"
  .Execute Replace:=wdReplaceAll
End With
Application.ScreenUpdating = True
End Sub
票数 2
EN

Stack Overflow用户

发布于 2019-02-22 05:15:11

最可靠的方法是使用Range对象而不是Selection。使用Range时,文档中的选择内容不会更改。

代码语言:javascript
复制
  Sub AddOneSpaceBetweenSentences()
    ' AddOneSpaceBetweenSentences Macro
    '
     Dim rng as Word.Range

     Set rng = ActiveDocument.Content
     With rng.Find
       .Forward = True
       .Text = "(?)([.\?\!])([A-Z])"
       .ClearFormatting
       .Replacement.Text = "\1\2 \3" 'there is a space between \2 and \3
       .MatchWildcards = True
       .Wrap = wdFindContinue
       .Execute Replace:=wdReplaceAll
    End With

  End Sub
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54813701

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档