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