View Single Post
 
Old 02-02-2018, 07:13 PM
JML's Avatar
JML JML is offline Mac OS X Office 2016 for Mac
Novice
 
Join Date: Feb 2018
Location: Pittsburgh, PA
Posts: 5
JML is on a distinguished road
Default Macro problems with Word for Mac 2016 16.9.1

I have a free macro from DocTools that I used for years in Word under Windows and Mac, and it suddenly fails under the newest Word for Mac version. The author of DocTools says she works only with Windows (although the macro worked fine on my Mac before). I get an error message almost immediately about "Run-Time Error 4231" and "Command not available." It stops at this line:

"Creation date: " & Format(Date, "MMMM d, yyyy")

I can't figure out how to debug this or what's been changed in that newest Word update. I tried turning on macros in Word and that doesn't change the results. Here's the macro:

Code:
Sub ExtractCommentsToNewDoc()
'
' ExtractCommentsToNewDoc Macro
    'Macro created 2007 by Lene Fredborg, DocTools - www.thedoctools.com
    'The macro creates a new document
'and extracts all comments from the active document
'incl. metadata
'Minor adjustments are made to the styles used
'You may need to change the style settings and table layout to fit your needs
'=========================

    Dim oDoc As Document
    Dim oNewDoc As Document
    Dim oTable As Table
    Dim nCount As Long
    Dim n As Long
    Dim Title As String
    

    Title = "Extract All Comments to New Document"
    Set oDoc = ActiveDocument
    nCount = ActiveDocument.Comments.Count
    

    If nCount = 0 Then
        MsgBox "The active document contains no comments.", vbOKOnly, Title
        GoTo ExitHere
    Else
        'Stop if user does not click Yes
        If MsgBox("Do  you want to extract all comments to a new document?", _
                vbYesNo + vbQuestion, Title) <> vbYes Then
            GoTo ExitHere
        End If
    End If
        

    Application.ScreenUpdating = False
    'Create a new document for the comments, base on Normal.dot
    Set oNewDoc = Documents.Add
    'Set to landscape
    oNewDoc.PageSetup.Orientation = wdOrientLandscape
    'Insert a 4-column table for the comments
    With oNewDoc
        .Content = ""
        Set oTable = .Tables.Add _
            (Range:=Selection.Range, _
            numrows:=nCount + 1, _
            NumColumns:=4)
    End With
    

    'Insert info in header - change date format as you wish
    oNewDoc.Sections(1).Headers(wdHeaderFooterPrimary).Range.Text = _
        "Comments 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)
        .Font.Name = "Arial"
        .Font.Size = 10
        .ParagraphFormat.LeftIndent = 0
        .ParagraphFormat.SpaceAfter = 6
    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
        .Columns(1).PreferredWidth = 5
        .Columns(2).PreferredWidth = 25
        .Columns(3).PreferredWidth = 50
        .Columns(4).PreferredWidth = 20
        .Rows(1).HeadingFormat = True
    End With


    'Insert table headings
    With oTable.Rows(1)
        .Range.Font.Bold = True
        .Cells(1).Range.Text = "Page"
        .Cells(2).Range.Text = "Comment scope"
        .Cells(3).Range.Text = "Comment text"
        .Cells(4).Range.Text = "Author"
    End With
    

    'Get info from each comment from oDoc and insert in table
    For n = 1 To nCount
        With oTable.Rows(n + 1)
            'Page number
            .Cells(1).Range.Text = _
                oDoc.Comments(n).Scope.Information(wdActiveEndPageNumber)
            'The text marked by the comment
            .Cells(2).Range.Text = oDoc.Comments(n).Scope
            'The comment itself
            .Cells(3).Range.Text = oDoc.Comments(n).Range.Text
            'The comment author
            .Cells(4).Range.Text = oDoc.Comments(n).Author
        End With
    Next n
    

    Application.ScreenUpdating = True
    Application.ScreenRefresh
        

    oNewDoc.Activate
    MsgBox nCount & " comments found. Finished creating comments document.", vbOKOnly, Title


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

End Sub

Last edited by macropod; 02-03-2018 at 12:55 PM. Reason: Added code tags
Reply With Quote