如何正确组合多个Find&Replace WordVBA代码?

问题描述 投票:0回答:1

我是一名转录员。我处理很长的文档并经常使用“查找和替换”。因此,我一直在尝试编写一个高效的 Word VBA 代码,以三种不同的方式查找和替换多个特定的通配符字符串:

  • 替换为粗体。
  • 替换为斜体。
  • 替换为大写。

需要明确的是,通过按一个按钮/快捷方式,我可以分别用粗体、斜体和大写字母查找/替换特定的 wildcard 字符串列表;三“批”字符串,三种不同的替换操作。

目前我有一个“全局”代码,它调用三(3)个单独的代码,每个代码调用更多代码。我认为这远非理想。它非常巨大,需要很长时间才能执行,变得滞后等等。

这是“全局”代码:

Sub ERET_ES_Format()
Application.ScreenUpdating = False    
Call ERET_ES_Bold
Call ERET_ES_Italicize
Call ERET_ES_Capitalize
Call ERET_GoToBookmark_End
Application.ScreenUpdating = True
End Sub

这些是三 (3) 个后续代码:

Sub ERET_ES_Bold()
Call ClearParameters
Call ERET_C_Bold_Articles_ES
Call ClearParameters
Call ERET_C_Bold_Officials_ES
Call ClearParameters
Call ERET_C_Bold_Titles_ES
Call ClearParameters
Call ERET_C_Bold_QA
Call ClearParameters
Call ERET_C_Bold_Headers_ES
Call ClearParameters
Call ERET_C_Bold_TwoNames
Call ClearParameters
End Sub

Sub ERET_ES_Italicize()
Call ClearParameters
Call ERET_C_Italicize_EnglishWords
Call ClearParameters
Call ERET_C_Italicize_LatinWords
Call ClearParameters
End Sub

Sub ERET_ES_Capitalize()
Call ClearParameters
Call ERET_C_CapsAfter_TwoSpaces
Call ClearParameters
Call ERET_C_CapsAfter_Symbols
Call ClearParameters
Call ERET_C_CapsAfter_Tabs
Call ClearParameters
End Sub

剩下的代码或多或少类似于这两个:

Sub ERET_C_Bold_Titles_ES()
    selection.Find.ClearFormatting
    selection.Find.Replacement.ClearFormatting
    selection.Find.Replacement.Font.Bold = True
        'LCDO(A)
        With selection.Find
        .Text = "^t(LCD[AO]. *:)"
        .Replacement.Text = "^t\1"
        .Forward = True
        .Wrap = wdFindContinue
        .Format = True
        .MatchCase = False
        .MatchWholeWord = False
        .MatchAllWordForms = False
        .MatchSoundsLike = False
        .MatchWildcards = True
        End With
        selection.Find.Execute Replace:=wdReplaceAll
        'HON.
        With selection.Find
        .Text = "^t(HBLE. *:)"
        .Replacement.Text = "^t\1"
        .Wrap = wdFindContinue
        End With
        selection.Find.Execute Replace:=wdReplaceAll
        'SR./A.
        With selection.Find
        .Text = "^t(S[AR]{1,2}. *:)"
        .Replacement.Text = "^t\1"
        .Wrap = wdFindContinue
        End With
        selection.Find.Execute Replace:=wdReplaceAll
        'DR./A.
        With selection.Find
        .Text = "^t(D[AR]{1,2}. *:)"
        .Replacement.Text = "^t\1"
        .Wrap = wdFindContinue
        End With
        selection.Find.Execute Replace:=wdReplaceAll
        'ING.
        With selection.Find
        .Text = "^t(ING. *:)"
        .Replacement.Text = "^t\1"
        .Wrap = wdFindContinue
        End With
        selection.Find.Execute Replace:=wdReplaceAll
        'NO IDENTIFICADO X
        With selection.Find
        .Text = "^t(NO IDENTIFICADO [0-9]:)"
        .Replacement.Text = "^t\1"
        .Wrap = wdFindContinue
        End With
        selection.Find.Execute Replace:=wdReplaceAll
End Sub

Sub ERET_C_CapsAfter_Tabs()
selection.Find.ClearFormatting
selection.Find.Replacement.ClearFormatting
    With selection.Find
        .ClearFormatting
        .Text = "^t([a-záéíóú])"
        .Forward = True
        .Wrap = wdFindContinue
        .Format = True
        .MatchCase = False
        .MatchWholeWord = False
        .MatchWildcards = True
        .MatchSoundsLike = False
        .MatchAllWordForms = False
        .Execute
        While .Found
            selection.range.Case = wdUpperCase
            selection.Collapse Direction:=wdCollapseEnd
            .Execute
        Wend
    End With
End Sub

我认为,如果我至少可以结合“较低”的代码,那可能会向前迈出一步。我一直在寻找有关如何在一次操作中查找/替换多个字符串的信息,是的,有很多示例,但它们没有使用通配符,而且我似乎无法正确添加“MatchWildcards”部分(如果这是这样做的方法,我真的不知道)或修改它们以便它们工作。

有什么建议吗?我错过了什么主题吗?

我刚刚开始学习 VBA 编码。如果有我没有看到的明显例子,或者已经被问/回答过,或者如果我很烦人并且错过了这里显而易见的内容,我深表歉意。我将不胜感激任何信息。我并不是要求有人给我写完整的代码。我真的很想学。

提前谢谢您。

vba ms-word wildcard
1个回答
0
投票

更新:

感谢 Charles Kenyon,我能够清理代码,解决我遇到的所有问题。

这些是任何感兴趣的人的更新代码:

Sub ERET_SetFormat_ES()
Application.ScreenUpdating = False
Call ERET_SetBold
Call ERET_SetItalic
Call ERET_SetCase
Application.ScreenUpdating = True
End Sub

Sub ERET_SetBold()
    SetBold ""      'INSERT WILDCARD STRING
    SetBold ""      'INSERT WILDCARD STRING
    SetBold ""      'INSERT WILDCARD STRING
End Sub

Sub SetBold(findText As String)
    selection.Find.ClearFormatting
    selection.Find.Replacement.ClearFormatting
    selection.Find.Replacement.Font.Bold = True
    With selection.Find
        .Text = findText
        .Forward = True
        .Wrap = wdFindContinue
        .Format = True
        .MatchCase = False
        .MatchWholeWord = False
        .MatchAllWordForms = False
        .MatchSoundsLike = False
        .MatchWildcards = True
    End With
    selection.Find.Execute Replace:=wdReplaceAll
End Sub

Sub ERET_SetItalic()
    SetItalic ""      'INSERT WILDCARD STRING
    SetItalic ""      'INSERT WILDCARD STRING
    SetItalic ""      'INSERT WILDCARD STRING
End Sub

Sub SetItalic(findText As String)
    selection.Find.ClearFormatting
    selection.Find.Replacement.ClearFormatting
    selection.Find.Replacement.Font.Italic = True
    With selection.Find
        .Text = findText
        .Forward = True
        .Wrap = wdFindContinue
        .Format = True
        .MatchCase = False
        .MatchWholeWord = False
        .MatchAllWordForms = False
        .MatchSoundsLike = False
        .MatchWildcards = True
    End With
    selection.Find.Execute Replace:=wdReplaceAll
End Sub

Sub ERET_SetCase()
    Call SetCase("")    'INSERT WILDCARD STRING
    Call SetCase("")    'INSERT WILDCARD STRING
    Call SetCase("")    'INSERT WILDCARD STRING
End Sub

Sub SetCase(pattern As String)
    selection.Find.ClearFormatting
    selection.Find.Replacement.ClearFormatting
    With selection.Find
        .ClearFormatting
        .Text = pattern
        .Forward = True
        .Wrap = wdFindContinue
        .Format = True
        .MatchCase = False
        .MatchWholeWord = False
        .MatchWildcards = True
        .MatchSoundsLike = False
        .MatchAllWordForms = False
        .Execute
        While .Found
            selection.range.Case = wdUpperCase
            selection.Collapse Direction:=wdCollapseEnd
            .Execute
        Wend
    End With
End Sub
© www.soinside.com 2019 - 2024. All rights reserved.