Regex 为什么这个VB程序总是返回1作为页码?

Regex 为什么这个VB程序总是返回1作为页码?,regex,vb.net,vba,ms-word,Regex,Vb.net,Vba,Ms Word,此程序使用RegExp方法在MS Word文档中查找某些单词。一旦找到了每个匹配项,程序就应该找到每个匹配项的页面,并创建一个可以输出的字符串,以显示找到该关键字匹配项的所有页面。现在的编写方式是,出于某种原因,无论在哪一页上找到它,它都会为每一页输出一个“1”。例如,如果在第1页、第5页和第22页找到“鼠标”一词,它将输出1、1、1、 For Each Match In RegExp.Execute(oWord.ActiveDocument.Range.Text) my

此程序使用RegExp方法在MS Word文档中查找某些单词。一旦找到了每个匹配项,程序就应该找到每个匹配项的页面,并创建一个可以输出的字符串,以显示找到该关键字匹配项的所有页面。现在的编写方式是,出于某种原因,无论在哪一页上找到它,它都会为每一页输出一个“1”。例如,如果在第1页、第5页和第22页找到“鼠标”一词,它将输出1、1、1、

For Each Match In RegExp.Execute(oWord.ActiveDocument.Range.Text)
            myKeyWords(numKeywords) = Match.Value
    PageNumbers(numKeywords) = ""

    With myWordDoc.ActiveDocument.Range.Find
        .ClearFormatting()
        .Text = Match.value
        .Wrap = False
        .Forward = True
        Do While .Execute = True
           If PageNumbers(numKeywords) = "" Then
               PageNumbers(numKeywords) = oWord.Selection.Information(Word.WdInformation.wdActiveEndAdjustedPageNumber)
           Else
              PageNumbers(numKeywords) = PageNumbers(numKeywords) & ", " & oWord.Selection.Information(Word.WdInformation.wdActiveEndAdjustedPageNumber)
           End If
        Loop
    End With

numKeywords不是递增的。我已经把它写出来了

For Each Match In RegExp.Execute(oWord.ActiveDocument.Range.Text)
在这里,请注意,如果在regexp方法之外使用此函数,则需要在查找之前更改.Text=myKeywords(x)并删除.range

PageNumbers(numKeywords) = ""
For x = LBound(myKeywords) To UBound(myKeywords)
    PageNumbers(x) = ""
    With myWordDoc.ActiveDocument.Find
        .ClearFormatting()
        .Text = myKeywords(x)
        .Wrap = False
        .Forward = True
        Do While .Execute = True
           If PageNumbers(numKeywords) = "" Then
               PageNumbers(numKeywords) = oWord.Selection.Information(Word.WdInformation.wdActiveEndAdjustedPageNumber)
           Else
              PageNumbers(numKeywords) = PageNumbers(numKeywords) & ", " & oWord.Selection.Information(Word.WdInformation.wdActiveEndAdjustedPageNumber)
           End If
        Loop
    End With  

我猜你的问题是页码(numKeywords)总是“”。您需要评估此方法和/或numKeywords,以确保它们都能产生预期的结果。另外,您可以将表达式编写为SourceString+=“,..”而不是SourceString=SourceString+”,..“它更整洁,并且可以保存键入内容。PageNumber(numKeywords)并不总是“”,它实际上在If-Else语句期间发生更改,但每次For-each-Match语句启动时都会重置。谢谢你提供的其他信息。