1

我正在尝试在 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 完全陌生,所以我不知道该怎么做。有什么建议么?

谢谢你的帮助!莱尼

4

1 回答 1

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) & Chr(41)) 来解释括号,因为令人惊讶的是(至少对我而言),宏无法找到目标字符串。我做了一些测试,问题只发生在括号后面跟着另一个字符(?!)。

于 2013-06-15T19:41:22.113 回答