我有一个成功搜索的宏用这段代码替换文档中的一系列单词:
'define array1 with words I want replaced
'define array2 with words I want to replace with so that they have the same index
'loop through array and search and replace
with application.activedocument.content.find
for i=1 to 565
.text=array1(i)
.replacement.text=array2(i)
.wrap=wdfindcontinue
.format=false
.matchcase=false
.matchwholeword=true
.matchwildcards=false
.matchallwordsforms=false
.matchsoundslike=false
.matchsuffix=true
.matchprefix=true
.execute replace:=wdreplaceall
next
end with
我想更改功能,以便它不会替换单词,如果它是行中的第一个单词,但是我发现find函数不能逐行工作,或允许条件测试属性,所以我认为最好的方法是让我改变我的函数操作的范围,以排除每行中的第一个单词。
因此,我需要以某种方式定义ActiveDocument.Range而不是ActiveDocument.Content.Find,以便排除每行的第一个单词。
有没有人知道如何定义范围,以便排除每行的第一个单词。
由于
答案 0 :(得分:0)
不确定你的应用程序和“行中的第一个单词”我假设你的意思是段落的第一个单词,但这适用于将搜索应用于整个段落(第一个单词除外)
'Array position 0 1 2 3 4
array1 = Array("1", "2", "3", "4", "5")
array2 = Array("one", "two", "three", "four", "five")
For p = 1 To ActiveDocument.Paragraphs.Count
'Seelcting the paragraph
ActiveDocument.Paragraphs(p).Range.Select
'Checking if the paragraph is not a blank line
If Len(Selection) > 1 Then
'Moving to begining of the paragraph
Selection.HomeKey
'Moving one word to the left
Selection.MoveRight Unit:=wdWord, Count:=1
'Selecting the rest of the paragraph
Selection.MoveEnd Unit:=wdParagraph
'Setting the selection as a Bookmark
ActiveDocument.Bookmarks.Add Range:=Selection.Range, Name:="TempBM"
For i = 0 To 4
With Selection.Find
.Text = array1(i)
.Replacement.Text = array2(i)
.Forward = True
.Wrap = wdFindStop
.Format = False
'Replace that text
Do While .Execute(Replace:=wdReplaceOne)
'Reselect the Bookmark
Selection.GoTo What:=wdGoToBookmark, Name:="TempBM"
Loop
End With
Next
'Deleting Bookmark
ActiveDocument.Bookmarks("TempBM").Delete
End If
Next
对于测试,它改变了这一点(我在第一个单词中添加了1以验证它忽略它:
1这是一个测试1 2 3 4 5
1这是一个测试1 2 3 4 5
为:
1这是一个测试一个二三四五。
1这是一个测试一个二三四五。