2009-04-16 9 views
4

J'espérais que quelqu'un pourrait aider avec une macro MS Word. Fondamentalement, j'ai un document MS Word qui répertorie plusieurs fichiers texte et des pages spécifiques d'intérêt dans chaque fichier.Utilisation de VBA pour analyser du texte dans un document MS Word

Le format de fichier est similaire à:

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

Je veux lire chaque ligne dans ma macro comme une chaîne.

Parcourez ensuite le chemin pour identifier le nom du fichier. Avec le nom de fichier, je peux alors ouvrir le fichier, aller au numéro de page et copier les données dont j'ai besoin.

Mais je suis bloqué à l'étape 1, comment puis-je capturer la ligne dans une chaîne dans une macro MS Word?

Toute aide sera appréciée.

Répondre

4

Le code suivant devrait démarrer:

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 

Je trouve l'algorithme de base dans this article.

+0

Ceci brisera le document en plusieurs paragraphes. Si vous voulez que les phrases soient faites par ligne (c'est-à-dire par phrase), vérifiez ma réponse ci-dessous. –

3

Si votre document Word répertorie tous les fichiers texte comme celui-ci:

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

Ensuite, toutes les lignes sont disponibles dans le Paragraphs collection. Vous pouvez faire une boucle à travers ce avec une simple boucle For Each:

Dim p As Paragraph 

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

par ligne

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