VBA Word:条件文本替换

时间:2015-08-19 15:10:08

标签: vba excel-vba ms-word word-vba excel

我有一个成功搜索的宏用这段代码替换文档中的一系列单词:

'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,以便排除每行的第一个单词。

有没有人知道如何定义范围,以便排除每行的第一个单词。

由于

1 个答案:

答案 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这是一个测试一个二三四五。