Vba 如何找到&;代替

Vba 如何找到&;代替,vba,ms-word,Vba,Ms Word,我有这个代码,我想知道它是否可以更短 我是VBA新手,我从宏录制器开始。功能是“查找和替换”。我知道这一定有一个简短的代码 Sub TOs() ' ' MACRO_TOS Macro ' ' Selection.Find.ClearFormatting Selection.Find.Replacement.ClearFormatting With Selection.Find .Text =

我有这个代码,我想知道它是否可以更短

我是VBA新手,我从宏录制器开始。功能是“查找和替换”。我知道这一定有一个简短的代码

Sub TOs()
    '
    ' MACRO_TOS Macro    
    '    
    '
    Selection.Find.ClearFormatting    
    Selection.Find.Replacement.ClearFormatting    

    With Selection.Find
        .Text = "To=____________________________"   
        .Replacement.Text = ""    
        .Forward = True    
        .Wrap = wdFindContinue    
        .Format = False    
        .MatchCase = False    
        .MatchWholeWord = False    
        .MatchWildcards = False    
        .MatchSoundsLike = False    
        .MatchAllWordForms = False    
    End With

    Selection.Find.Execute

    With Selection    
        If .Find.Forward = True Then    
            .Collapse Direction:=wdCollapseStart    
        Else    
            .Collapse Direction:=wdCollapseEnd    
        End If  

        .Find.Execute Replace:=wdReplaceOne   

        If .Find.Forward = True Then    
            .Collapse Direction:=wdCollapseEnd    
        Else    
            .Collapse Direction:=wdCollapseStart    
        End If

        .Find.Execute    
    End With    
End Sub
  • 您可以使用
    Replace:=wdReplaceAll
    一次全部替换
  • 您可以使用
    .MatchWildcards=True
    在可能出现空格的
    .Text
    中允许使用通配符。例如:
    .Text=“To*=*.\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
  • 例如:

    Option Explicit
    
    Sub RemoveTo()
        Selection.Find.ClearFormatting
        Selection.Find.Replacement.ClearFormatting
        With Selection.Find
            .Text = "To=____________________________"
            .Replacement.Text = ""
            .Forward = True
            .Wrap = wdFindContinue
            .Format = False
            .MatchCase = False
            .MatchWholeWord = False
            .MatchAllWordForms = False
            .MatchSoundsLike = False
            .MatchWildcards = True
        End With
    
        Selection.Find.Execute Replace:=wdReplaceAll 'replaceAll
    End Sub
    

    MatchCase、MatchWholeWordForms、MatchAllWordForms和MatchSounds都不能使用通配符。因此,该准则可简化为:

    Sub RemoveTo()
    With Selection.Find
      .ClearFormatting
      .Replacement.ClearFormatting
      .Text = "To[ =]@[_]{1,}"
      .Replacement.Text = ""
      .Forward = True
      .Format = False
      .Wrap = wdFindContinue
      .MatchWildcards = True
      .Execute Replace:=wdReplaceAll
    End With
    End Sub
    
    甚至:

    Sub RemoveTo()
    With Selection.Find
      .ClearFormatting
      .Replacement.ClearFormatting
      .Execute FindText:="To[ =]@[_]{1,}", ReplaceWith:="", MatchWildcards:=True, _
        Forward:=True, Format:=False, Wrap:=wdFindContinue, Replace:=wdReplaceAll
    End With
    End Sub
    

    此外,我还有一个文本无法查找和替换,因为它在每个单词之间都有选项卡式空格,您知道如何查找和替换它吗?此代码是MS word代码。请通过将标记从更改为来澄清标记中的内容,否则它将显示在错误的类别中。@Pᴇʜ是的,我的错!
    .Clear
    .Replacement.ClearFormatting
    With
    之前和
    之后执行…
    都可以包含在
    With
    块中吗?@FreeMan您当然可以将它们包含在
    With
    块中。这只是因为宏记录器记录宏的技术问题。它不会生成完美的代码。“它不会生成完美的代码”-对此非常清楚!!不过,不得不说,它比Excel的宏记录器生成的代码更好看。