Excel VBA从Word中找到的文本中获取页码

Excel VBA从Word中找到的文本中获取页码,vba,excel,macros,Vba,Excel,Macros,我是VBA新手,我正在尝试在Excel中组合一个宏。此宏用于搜索Word文档中的特定文本字符串,并返回其所在的页码(即,该列将显示“####在文档的#页上找到”) 我似乎很接近我想要的。宏找到文本,我可以让它告诉我它找到了/没有找到它。但是,当我使用返回页码的代码运行它时,它告诉我索引超出范围。我确信困难在于我对物体及其性质的理解有限 感谢您的帮助 Sub OpenWordDoc() Set wordapp = CreateObject("word.Application"

我是VBA新手,我正在尝试在Excel中组合一个宏。此宏用于搜索Word文档中的特定文本字符串,并返回其所在的页码(即,该列将显示“####在文档的#页上找到”)

我似乎很接近我想要的。宏找到文本,我可以让它告诉我它找到了/没有找到它。但是,当我使用返回页码的代码运行它时,它告诉我索引超出范围。我确信困难在于我对物体及其性质的理解有限

感谢您的帮助

    Sub OpenWordDoc()
       Set wordapp = CreateObject("word.Application")
         wordapp.Visible = True
         wordapp.Activate
         wordapp.Documents.Open "filename.docx"
         Set findRange = Sheet1.Range("D4:D8")
         For Each findCell In findRange.Cells
           Set rngFound = wordapp.ActiveDocument.Range.Find
           rngFound.Text = findCell.Value
           rngFound.Execute
           If rngFound.Found Then
              findCell.Offset(columnOffset:=1) =  rngFound.Parent.Information(wdActiveEndPageNumber)
           Else
              findCell.Offset(columnOffset:=1) = findCell.Value
           End If
        Next findCell
     wordapp.Quit
     Set wordapp = Nothing
    End Sub

编辑1:我在一台完全不同的计算机和不同版本的Word和Excel上试过这个。同样的消息会弹出。错误是这个片段-rngFound.Parent.Information(wdActiveEndPageNumber)-我认为rngFound.Parent不是一个“选择”。我还尝试将wdActiveEndPageNumber替换为wdNumberOfPagesInDocument,只是想看看它是否是特定的值,并得到了相同的错误消息。

尝试以下方法:

Sub OpenWordDoc()
    Dim wordapp As Word.Application
    Dim findRange As Excel.Range
    Dim findCell As Excel.Range
    Dim rngFound As Word.Range

    Set wordapp = CreateObject("word.Application")
    wordapp.Visible = True
    wordapp.Activate
    wordapp.Documents.Open "filename.docx"
    Set findRange = Sheet1.Range("D4:D8")
    For Each findCell In findRange.Cells
        Set rngFound = wordapp.ActiveDocument.Range
        With rngFound.Find
            .Text = findCell.Value
            .Execute
        End With
        If rngFound.Find.Found Then
            findCell.Offset(columnOffset:=1) = rngFound.Information(wdActiveEndPageNumber)
        Else
            findCell.Offset(columnOffset:=1) = findCell.Value
        End If
    Next findCell
    wordapp.Quit

    Set rngFound = Nothing
    Set findCell = Nothing
    Set findRange = Nothing
    Set wordapp = Nothing
End Sub

希望这有助于

究竟哪一行给出了错误?当我尝试复制该问题时,它对我来说运行正常。我得到“运行时错误'4608':值超出范围”它位于我将单元格设置为等于哪一行的页码的行上?传递到该行上的函数中的值是什么?findCell.Offset(ColumnPoster:=1)=rngFound.Parent.Information(wdActiveEndPageNumber)-我相信错误来自范围.Parent.Information部分您的工作表上是否有某种类型的数据验证,或其他可能导致赋值失败的内容?请仔细检查函数返回的值,以查看函数是否失败,或赋值是否为:
Debug.Print rngFound.Parent.Information(wdActiveEndPageNumber)
我必须为Word打开对象库,但这完全做到了!谢谢!谢谢!我知道问题与Excel与Word对象的混淆有关。