2010-04-29 7 views
4

J'essaie d'exporter les commentaires d'examen d'un document Word. Je veux exporter la sélection de phrase qui a été commentée suivie du commentaire.Lors de l'exportation des commentaires Word, comment faites-vous référence à la phrase associée à un commentaire?

Capture d'écran de l'image: http://jspeaks.com/mswordcomment.png

J'ai trouvé le code à boucle à travers le document des commentaires, mais je ne peux pas comprendre comment référencer la sélection de phrase que le commentaire était lié à.

La logique actuelle est:

Sub ExportComments() 
    Dim s As String 
    Dim cmt As Word.Comment 
    Dim doc As Word.Document 

    For Each cmt In ActiveDocument.Comments 
     s = s & cmt.Initial & cmt.Index & "," & cmt.Range.Text & vbCr 
    Next 

    Set doc = Documents.Add 
    doc.Range.Text = s 
End Sub 

Je bricolé avec Selection.Range, mais je ne peux pas déterminer l'objet propre ou propriété qui contient la phrase fait référence.

Je voudrais produire la sortie suivante (si nous utilisons l'exemple dans l'image ci-dessus):

phrase: Voici d'autres phrases qui contiennent des faits intéressants - Commentaire: Ceci est un fait intéressant. Phrase: Voici d'autres phrases qui contiennent des faits intéressants. Voici d'autres phrases qui contiennent des faits intéressants. - Commentaire: Ceci est un fait très intéressant

Répondre

8

J'ai trouvé quelqu'un sur un autre site pour résoudre cette question.

La clé de la solution est: cmt.Scope.FormattedText

Voici la fonction révisée:

Sub ExportComments() 
    Dim s As String 
    Dim cmt As Word.Comment 
    Dim doc As Word.Document 

    For Each cmt In ActiveDocument.Comments 
     s = s & "Text: " & cmt.Scope.FormattedText & " -> " 
     s = s & "Comments: " & cmt.Initial & cmt.Index & ":" & cmt.Range.Text & vbCr 
    Next 

    Set doc = Documents.Add 
    doc.Range.Text = s 
End Sub 
+2

Très bien que vous ayez une solution. Vous pouvez aller de l'avant et accepter votre propre réponse comme la bonne (la coche). –

3

J'ai rassemblé plusieurs morceaux de code et est venu à cette solution:

Sub CopyCommentsToExcel() 
'Create in Word vba 
'TODO: set a reference to the Excel object library (Tools --> Reference --> Microsoft Excel 12.0 Object library) 

Dim xlApp As Excel.Application 
Dim xlWB As Excel.Workbook 
Dim i As Integer 
Dim HeadingRow As Integer 
HeadingRow = 3 

Dim cmtRef As Range 

Set xlApp = CreateObject("Excel.Application") 
xlApp.Visible = True 
Set xlWB = xlApp.Workbooks.Add ' create a new workbook 
With xlWB.Worksheets(1) 
' Create report info 
    .Cells(1, 1).Formula = "Reviewed document:" 

' Create Heading 
    .Cells(HeadingRow, 1).Formula = "Index" 
    .Cells(HeadingRow, 2).Formula = "Page" 
    .Cells(HeadingRow, 3).Formula = "Line" 
    .Cells(HeadingRow, 4).Formula = "Comment" 
    .Cells(HeadingRow, 5).Formula = "Reviewer" 
    .Cells(HeadingRow, 6).Formula = "Date" 
    For i = 1 To ActiveDocument.Comments.Count 
     .Cells(2, 1).Formula = ActiveDocument.Comments(i).Parent 
     .Cells(i + HeadingRow, 1).Formula = ActiveDocument.Comments(i).Index 
     .Cells(i + HeadingRow, 2).Formula = ActiveDocument.Comments(i).Reference.Information(wdActiveEndAdjustedPageNumber) 
     .Cells(i + HeadingRow, 3).Formula = ActiveDocument.Comments(i).Reference.Information(wdFirstCharacterLineNumber) 
     .Cells(i + HeadingRow, 4).Formula = ActiveDocument.Comments(i).Range 
     .Cells(i + HeadingRow, 5).Formula = ActiveDocument.Comments(i).Initial 
     .Cells(i + HeadingRow, 6).Formula = Format(ActiveDocument.Comments(i).Date, "dd/MM/yyyy") 
     '  .Cells(i + 1, 3).Formula = ActiveDocument.Comments(i).Parent 
     '  .Cells(i + 1, 3).Formula = ActiveDocument.Comments(i).Application 
     '  .Cells(i + 1, 7).Formula = ActiveDocument.Comments(i).Author 
    Next i 
End With 
Set xlWB = Nothing 
Set xlApp = Nothing 
End Sub 

Une aide précieuse de Microsoft Answers

+0

user662182: Merci pour l'excellente contribution, mais cette macro ne compilera pas sous Word 2007 jusqu'à ce que l'utilisateur suit les instructions dans le commentaire TODO de la source VBA. Il est important de noter que si l'utilisateur exécute sans faire cela, l'option Tools-> References est grisée ... RESET la macro courante dans l'éditeur VB, ALORS l'option est active !! – user2831074