2009-04-16 9 views
4

Ich hatte gehofft, jemand könnte mit einem MS Word Macro helfen.Verwenden von VBA zum Parsen von Text in einem MS Word Dokument

Grundsätzlich habe ich ein MS Word-Dokument, das mehrere Textdateien und bestimmte Seiten von Interesse in jeder Datei auflistet.

Das Dateiformat ist ähnlich:

 
textdocument1.txt    P. 6, 12 - issue1 
textdocument2.txt    P. 5 - issue1 
           P. 13, 17 - issue3 
textdocument3.txt    P. 10 

ich jede Zeile in mein Makro als String lesen möchten.

Dann durchlaufen Sie durch, um den Dateinamen zu identifizieren. Mit dem Dateinamen kann ich dann die Datei öffnen, zur Seitennummer gehen und die benötigten Daten kopieren.

Aber ich bin bei Schritt 1 fest, wie zeichne ich die Zeile in eine Zeichenfolge in einem MS Word-Makro?

Jede Hilfe wird geschätzt.

Antwort

4

Der folgende Code sollten Sie begonnen:

Public Sub ParseLines() 
    Dim singleLine As Paragraph 
    Dim lineText As String 

    For Each singleLine In ActiveDocument.Paragraphs 
     lineText = singleLine.Range.Text 

     '// parse the text here... 

    Next singleLine 
End Sub 

ich den grundlegenden Algorithmus in this article gefunden.

+0

Hierdurch wird das Dokument nach oben in den Absätzen brechen. Wenn Sie Sätze pro Zeile (d. H. Satz) wollen, überprüfen Sie meine Antwort unten. –

3

Wenn Ihr Word-Dokument listet alle Textdateien wie folgt aus:

<name>{tab}<page ref>{newline} 
<name>{tab}<page ref>{newline} 
<name>{tab}<page ref>{newline} 

Dann werden alle Linien in der Paragraphs collection zur Verfügung stehen. Sie können mit einer einfachen For Each Schleife durch die Schleife:

Dim p As Paragraph 

For Each p In ActiveDocument.Paragraphs 
    Debug.Print p.Range.Text 
Next p 
2

pro Zeile

Public Sub ParseDoc() 

    Dim doc As Document 
    Set doc = ActiveDocument 
    Dim paras As Paragraphs 
    Set paras = doc.Paragraphs 
    Dim para As Paragraph 
    Dim sents As Sentences 
    Dim sent As Range 
    For Each para In paras 

     Set sents = para.Range.Sentences 
     For Each sent In sents 
      Debug.Print sent.Text 
     Next 

    Next 

End Sub