Results 1 to 4 of 4

Thread: Solved: VBA Tracked Changes HELP

  1. #1

    Post Solved: VBA Tracked Changes HELP

    Hi guys,

    I need your help here...

    i'm trying to create a VBA code to pull trakced changes from a document and display it in a newly created document.

    Does anyone know how i need to change this code so that it also picks up the insertions and deletions form header and footer of the document.

    the below code will extract only the insertions and deletions of main body but i've tried a few edits and nothing seems to work

    Thanks guys


    ------code-----

    Dim oDoc As Document
    Dim oNewDoc As Document
    Dim oTable As Table
    Dim oRow As Row
    Dim oCol As Column
    Dim oRange As Range
    Dim oRevision As Revision
    Dim strText As String
    Dim n As Long
    Dim i As Long
    Dim Title As String

    Title = "Extract Tracked Changes to New Document"
    n = 0 'use to count extracted changes

    Set oDoc = ActiveDocument

    If oDoc.Revisions.Count = 0 Then
    MsgBox "The active document contains no tracked changes.", vbOKOnly, Title
    GoTo ExitHere
    Else
    'Stop if user does not click Yes
    If MsgBox("Do you want to extract tracked changes to a new document?" & vbCr & vbCr & _
    "NOTE: Only insertions and deletions will be included. " & _
    "All other types of changes will be skipped.", _
    vbYesNo + vbQuestion, Title) <> vbYes Then
    GoTo ExitHere
    End If
    End If

    Application.ScreenUpdating = False
    'Create a new document for the tracked changes, base on Normal.dot
    Set oNewDoc = Documents.Add
    'Set to landscape
    oNewDoc.PageSetup.Orientation = wdOrientLandscape
    With oNewDoc
    'Make sure any content is deleted
    .Content = ""
    'Set appropriate margins
    With .PageSetup
    .LeftMargin = CentimetersToPoints(2)
    .RightMargin = CentimetersToPoints(2)
    .TopMargin = CentimetersToPoints(2.5)
    End With
    'Insert a 6-column table for the tracked changes and metadata
    Set oTable = .Tables.Add _
    (Range:=Selection.Range, _
    numrows:=1, _
    NumColumns:=6)
    End With

    'Insert info in header - change date format as you wish
    oNewDoc.Sections(1).Headers(wdHeaderFooterPrimary).Range.Text = _
    "Tracked changes extracted from: " & oDoc.FullName & vbCr & _
    "Created by: " & Application.UserName & vbCr & _
    "Creation date: " & Format(Date, "MMMM d, yyyy")

    'Adjust the Normal style and Header style
    With oNewDoc.Styles(wdStyleNormal)
    With .Font
    .Name = "Arial"
    .Size = 9
    .Bold = False
    End With
    With .ParagraphFormat
    .LeftIndent = 0
    .SpaceAfter = 6
    End With
    End With

    With oNewDoc.Styles(wdStyleHeader)
    .Font.Size = 8
    .ParagraphFormat.SpaceAfter = 0
    End With

    'Format the table appropriately
    With oTable
    .Range.Style = wdStyleNormal
    .AllowAutoFit = False
    .PreferredWidthType = wdPreferredWidthPercent
    .PreferredWidth = 100
    For Each oCol In .Columns
    oCol.PreferredWidthType = wdPreferredWidthPercent
    Next oCol
    .Columns(1).PreferredWidth = 5 'Page
    .Columns(2).PreferredWidth = 5 'Line
    .Columns(3).PreferredWidth = 10 'Type of change
    .Columns(4).PreferredWidth = 55 'Inserted/deleted text
    .Columns(5).PreferredWidth = 15 'Author
    .Columns(6).PreferredWidth = 10 'Revision date
    End With

    'Insert table headings
    With oTable.Rows(1)
    .Cells(1).Range.Text = "Page"
    .Cells(2).Range.Text = "Line"
    .Cells(3).Range.Text = "Type"
    .Cells(4).Range.Text = "What has been inserted or deleted"
    .Cells(5).Range.Text = "Author"
    .Cells(6).Range.Text = "Date"
    End With

    'Get info from each tracked change (insertion/deletion) from oDoc and insert in table
    For Each oRevision In oDoc.Revisions
    Select Case oRevision.Type
    'Only include insertions and deletions
    Case wdRevisionInsert, wdRevisionDelete
    'In case of footnote/endnote references (appear as Chr(2)),
    'insert "[footnote reference]"/"[endnote reference]"
    With oRevision
    'Get the changed text
    strText = .Range.Text

    Set oRange = .Range
    Do While InStr(1, oRange.Text, Chr(2)) > 0
    'Find each Chr(2) in strText and replace by appropriate text
    i = InStr(1, strText, Chr(2))

    If oRange.Footnotes.Count = 1 Then
    strText = Replace(Expression:=strText, _
    Find:=Chr(2), Replace:="[footnote reference]", _
    Start:=1, Count:=1)
    'To keep track of replace, adjust oRange to start after i
    oRange.Start = oRange.Start + i

    ElseIf oRange.Endnotes.Count = 1 Then
    strText = Replace(Expression:=strText, _
    Find:=Chr(2), Replace:="[endnote reference]", _
    Start:=1, Count:=1)
    'To keep track of replace, adjust oRange to start after i
    oRange.Start = oRange.Start + i
    End If
    Loop
    End With
    'Add 1 to counter
    n = n + 1
    'Add row to table
    Set oRow = oTable.Rows.Add

    'Insert data in cells in oRow
    With oRow
    'Page number
    .Cells(1).Range.Text = _
    oRevision.Range.Information(wdActiveEndPageNumber)

    'Line number - start of revision
    .Cells(2).Range.Text = _
    oRevision.Range.Information(wdFirstCharacterLineNumber)

    'Type of revision
    If oRevision.Type = wdRevisionInsert Then
    .Cells(3).Range.Text = "Inserted"
    'Apply automatic color (black on white)
    oRow.Range.Font.Color = wdColorAutomatic
    Else
    .Cells(3).Range.Text = "Deleted"
    'Apply red color
    oRow.Range.Font.Color = wdColorRed
    End If

    'The inserted/deleted text
    .Cells(4).Range.Text = strText

    'The author
    .Cells(5).Range.Text = oRevision.Author

    'The revision date
    .Cells(6).Range.Text = Format(oRevision.Date, "mm-dd-yyyy")
    End With
    End Select
    Next oRevision

    'If no insertions/deletions were found, show message and close oNewDoc
    If n = 0 Then
    MsgBox "No insertions or deletions were found.", vbOKOnly, Title
    oNewDoc.Close savechanges:=wdDoNotSaveChanges
    GoTo ExitHere
    End If

    'Apply bold formatting and heading format to row 1
    With oTable.Rows(1)
    .Range.Font.Bold = True
    .HeadingFormat = True
    End With

    Application.ScreenUpdating = True
    Application.ScreenRefresh

    oNewDoc.Activate
    MsgBox n & " tracked changed have been extracted. " & _
    "Finished creating document.", vbOKOnly, Title

    ExitHere:
    Set oDoc = Nothing
    Set oNewDoc = Nothing
    Set oTable = Nothing
    Set oRow = Nothing
    Set oRange = Nothing

    End Sub

    ------------------



  2. #2
    VBAX Contributor
    Joined
    Oct 2012
    Location
    Brisbane, Queensland, Australia
    Posts
    163
    Location
    You may as well access all of the story ranges in the document as there could be changes in some of them in addition to the ones in the Headers and Footers.


    See the article "Using a macro to replacetext where ever it appears in a document including Headers, Footers, Textboxes,etc.” at:

    http://www.word.mvps.org/FAQs/MacrosVBA/FindReplaceAllWithVBA.htm

  3. #3
    VBAX Guru macropod's Avatar
    Joined
    Jul 2008
    Posts
    4,273
    Location
    Cross-posted at: http://www.excelforum.com/word-progr...nges-help.html - where help has already been provided.
    For cross-posting etiquette, please read: http://www.excelguru.ca/content.php?184

    PS: When posting code, please use the VBA tags. They're on the menu. You were picked up on the same issue in the other forum.
    Cheers
    Paul Edstein
    [Fmr MS MVP - Word]

  4. #4
    Hi Paul,

    I am new even to these forums and shall be careful in future. Thanks for letting me know.

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •