2016-08-15 336 views
0

我是新来的VBA和我想放在一起的宏在Excel中。该宏用于在Word文档中搜索特定的文本字符串,并返回其所在的页码(即该列会在文档的第#页上显示“###”)。Excel的VBA从找到的文本得到页码在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不作为“选择”。我也尝试用wdNumberOfPagesInDocument替换wdActiveEndPageNumber,以查看它是否为特定值并获得相同的错误消息。

+1

究竟是什么线是给错误?当我尝试复制这个问题时,它对我来说运行良好。 – Mikegrann

+0

我收到“运行时错误‘4608’:值超出范围”是在哪里设置单元格等于页码 – user6718894

+0

那一行线什么被传递到函数在该行的值? ? – Mikegrann

回答

0

尝试这样:

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 

希望帮助

+0

我不得不打开对象Word的图书馆,但完全做到了!谢谢!谢谢!我知道这个问题与它对Excel和Word对象感到困惑有关。 – user6718894

+0

非常酷的xidgel! – 2016-11-22 16:01:47