Word-macro替换当前行中特定字符串的所有实例

时间:2013-06-15 07:37:37

标签: vba ms-word

我正在尝试在单词中创建一个宏来查找表中的特定单元格并替换那里的某些字符串。例如:

(word1或word2或word3).ab,ti。

应替换为

word1 [TIAB]或word2 [TIAB]或word3 [TIAB]

所以,到目前为止,我所做的是一个简单的 replaceAll 来删除初始括号并替换后缀“).ab,ti。” “[TIAB]。但当然,这并没有将结尾附加到word1和word2。

    Sub Makro6()
'
' Makro6 Makro
'
'
    Selection.Find.ClearFormatting
    Selection.Find.Replacement.ClearFormatting
    With Selection.Find
        .Text = ".ab,ti."
        .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
End Sub

我想我需要的是在 replaceAll 子中嵌入一个循环,该循环从第一个位置运行到当前行的末尾,并用“[TIAB]”替换字符串“或”要么 ”。但是,我对VBA完全是新手,所以我不知道怎么做到这一点。有什么建议吗?

感谢您的帮助! 莱尼

1 个答案:

答案 0 :(得分:3)

此代码执行您想要的操作:

Sub Makro6()

  Dim maxCount, curCount As Integer

  maxCount = 3
  curCount = 0
  Do
    curCount = curCount + 1
    Selection.Find.ClearFormatting
    Selection.Find.Replacement.ClearFormatting
    With Selection.Find
        .Text = Chr(40) & "word" & curCount & Chr(41) & ".ab,ti."
        .Replacement.Text = "word" & curCount & "[TIAB]"
        .Forward = True
        .Wrap = wdFindContinue
        .Format = False
        .MatchCase = False
        .MatchWholeWord = False
        .MatchAllWordForms = False
        .MatchSoundsLike = False
        .MatchWildcards = False
        .Execute Replace:=wdReplaceAll
    End With
  Loop While (curCount < maxCount)

End Sub

请注意,我不得不依赖ASCII代码(Chr(40)&amp; Chr(41))来考虑括号因为令人惊讶(至少对我而言),宏无法找到目标字符串。我做了一些测试,问题只发生在括号后跟另一个字符(?!)。