View Single Post
 
Old 01-17-2023, 01:49 PM
firstnamelast firstnamelast is offline Mac OS X Office 2016 for Mac
Novice
 
Join Date: Jan 2023
Posts: 1
firstnamelast is on a distinguished road
Default

Inspired by examples here and elsewhere, I created what I've wanted to have for ages
- ask for a section number (input box)
- enter a formatted cross-reference:
Quote:
section x.y.z 'name' (page xx)
Maybe it's useful for someone else too.
Keywords: VBA insert cross-reference formatted fields

Code:
Public Sub InsertParagraphReference()
'   code to ask for a paragraph reference (number)
'   and enter a formatted cross-reference (set of fields) in the document at current position

    Dim count As Integer
    Dim i As Integer
    Dim strSectionNumber As String
    Dim strHeader As String
    Dim myHeadings As Variant
    
    ' ask for number
    strSectionNumber = InputBox("Section number for formatted cross-reference", "Cross-reference")
        
    If Len(strSectionNumber) > 0 Then
        'get array of headings
        myHeadings = ActiveDocument.GetCrossReferenceItems(wdRefTypeNumberedItem)
        count = 0
        For i = 1 To UBound(myHeadings)
            'see if entered string is this heading
            strHeader = Trim(myHeadings(i))
            If Left(Trim(myHeadings(i)), Len(strSectionNumber)) = strSectionNumber Then
                count = count + 1
                'enter formatted cross-reference
                With Word.Selection
                    .InsertAfter "section "
                    .Collapse Direction:=wdCollapseEnd
                    'section number
                    .insertCrossReference _
                        ReferenceType:=wdRefTypeNumberedItem, _
                        ReferenceKind:=wdNumberFullContext, ReferenceItem:=i, _
                        InsertAsHyperlink:=True, IncludePosition:=False
                    .Collapse Direction:=wdCollapseEnd
                    'section header title'
                    .InsertAfter " '"
                    .Collapse Direction:=wdCollapseEnd
                    .insertCrossReference _
                        ReferenceType:=wdRefTypeNumberedItem, _
                        ReferenceKind:=wdContentText, ReferenceItem:=i, _
                        InsertAsHyperlink:=True, IncludePosition:=False
                    .Collapse Direction:=wdCollapseEnd
                    .InsertAfter "'"
                    .Collapse Direction:=wdCollapseEnd
                    'page number
                    .InsertAfter " (page "
                    .Collapse Direction:=wdCollapseEnd
                    .insertCrossReference _
                        ReferenceType:=wdRefTypeNumberedItem, _
                        ReferenceKind:=wdPageNumber, ReferenceItem:=i, _
                        InsertAsHyperlink:=True, IncludePosition:=False
                    .Collapse Direction:=wdCollapseEnd
                    .InsertAfter ")"
                    .Collapse Direction:=wdCollapseEnd
                End With
                Exit Sub
            End If
        Next i
        'notify if not found
        If count = 0 Then
            i = MsgBox("Could not find " & Chr(34) & strSectionNumber & Chr(34) & " as section number (enter in 'x.y.z' format)", vbOKOnly + vbExclamation)
        End If
    End If
End Sub
Reply With Quote