我有一个单词中的VBA代码,它遍历两个字符串数组,从一个数组中查找文档中的文本,并将其替换为另一个数组中的相应字符串,如下所示:
with application.activedocument.content.find
for i=1 to 100
.text=array1(i)
.replacement.text=array2(i)
.forward=true
.matchcase=true
.wrap=wdFindContinue
.matchwholeword=true
.matchwildcards=false
.matchallwordforms=false
.matchprefix=true
.matchsuffic=true
.matchsoundslike=false
.execute replace:=wdReplaceAll
next
end with
这会不分青红皂白地取代所有案件。是否有一种方法可以包含一个if子句,如果它是一行中的第一个单词,它就不会替换它?我不确定测试的vba代码是否是某行的第一个单词。
任何帮助都将不胜感激。
答案 0 :(得分:1)
由于“查找和替换”中的条件不是在行的开头不替换单词,因此我可以想到两个选项:
这些都不是特别优雅,但我选择了第二种选择。我通常更喜欢使用Range对象而不是使用Selection,但在这种情况下,Selection似乎更容易使用。请注意,您需要关闭换行才能使其正常工作。
For i = 1 To 100
Selection.MoveStart WdUnits.wdStory, Count:=-1
Do
Selection.MoveRight unit:=wdWord, Count:=1
Selection.EndKey unit:=wdLine, Extend:=wdExtend
With Selection.Find
.Text = array1(i)
.Replacement.Text = array2(i)
.Forward = True
.MatchCase = True
.MatchWholeWord = True
.MatchWildcards = False
.MatchAllWordForms = False
.MatchPrefix = True
.MatchSuffix = True
.MatchSoundsLike = False
.Execute Replace:=wdReplaceAll
End With
Selection.MoveStart unit:=wdLine, Count:=1
Loop Until Selection.End = ActiveDocument.Range.End
Next