2016-08-15 3 views
0

Ich bin neu in VBA und ich versuche, ein Makro in Excel zusammen. Dieses Makro dient dazu, ein Word-Dokument nach einer bestimmten Textzeichenfolge zu durchsuchen und die Seitennummer zurückzugeben, an der es sich befindet (d. H. Die Spalte sagt: "### wird auf der Seite des Dokuments gefunden").Excel VBA, um Seitenzahlen aus gefundenen Text in Word

Ich scheine sehr nahe zu sein, was ich will. Das Makro findet den Text und ich kann es bekommen, um mir zu sagen, dass es es gefunden hat/nicht gefunden hat. Wenn ich es jedoch mit Code ausführe, um die Seitenzahl zurückzugeben, teilt es mir mit, dass der Index außerhalb des Bereichs liegt. Ich bin sicher, die Schwierigkeit liegt in meinem begrenzten Verständnis der Objekte und ihrer Eigenschaften.

Jede Hilfe wird geschätzt!

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 

Edit 1: Ich habe dies auf einem völlig anderen Computer und verschiedenen Versionen von Word und Excel versucht. Die gleiche Nachricht erscheint. Der Fehler ist dieses Stück - rngFound.Parent.Information (wdActiveEndPageNumber) - und ich denke, die RngFound.Parent fungiert nicht als eine "Auswahl". Ich versuchte auch, die wdActiveEndPageNumber durch wdNumberOfPagesInDocument zu ersetzen, nur um zu sehen, ob es der spezifische Wert war und die gleiche Fehlermeldung bekam.

+1

hilft Genau das, was Linie den Fehler geben? Wenn ich versuche, das Problem zu replizieren, läuft es für mich gut. – Mikegrann

+0

Ich bekomme "Laufzeitfehler '4608': Wert außerhalb des Bereichs 'es ist an der Linie, wo ich die Zelle gleich der Seitenzahl gesetzt – user6718894

+0

Auf welcher Linie? Und welche Werte werden in die Funktion in dieser Zeile übergeben ? – Mikegrann

Antwort

0

versuchen, etwas wie folgt aus:

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 

Hoffnung, die

+0

Ich musste das Objekt einschalten Bibliothek für Word, aber das hat es komplett geschafft! Vielen Dank! Vielen Dank! Ich wusste, dass das Problem damit zu tun hatte, dass es bei Excel vs. Word-Objekten verwirrt wurde. – user6718894

+0

Sehr cool xidgel !! –

Verwandte Themen