Thanks Paul. I ended up with an approach similar to your suggestion. I removed the hyperlink switch from the TOC code so the TOC generates without hyperlinks and then used a macro to add hyperlinks to each heading in the TOC. Here's the code I used (there may be a cleaner method, but this one seems to work well).
Set rngTOC = ActiveDocument.TablesOfContents(1).Range
'add hyperlink to first heading in TOC
Set paraRange = rngTOC.Paragraphs(1).Range.Characters.Last
paraRange.Collapse wdCollapseStart
paraRange.MoveStartUntil vbTab, wdBackward
For Each fld In paraRange.Fields
If fld.Type = wdFieldPageRef Then
strTOC = Trim(Mid(fld.Code.Text, 9))
strTOC = Left(strTOC, Len(strTOC) - 3)
End If
Next
Set rngItem = rngTOC.Words.First
rngItem.Collapse wdCollapseEnd
rngItem.Move unit:=wdCharacter, count:=-1
rngItem.MoveEndUntil vbTab, wdForward
rngItem.MoveEnd wdCharacter, 1
rngItem.MoveEndUntil vbTab, wdForward
rngItem.Hyperlinks.Add Anchor:=rngItem, SubAddress:=strTOC
'add hyperlink to remaining headings in TOC
For i = 2 To rngTOC.Paragraphs.count Step 1
Set Para = rngTOC.Paragraphs(i)
If Para.Range.Fields.count <> 1 Then
GoTo nextparagraph
End If
For Each fld In Para.Range.Fields
If fld.Type = wdFieldPageRef Then
strTOC = Trim(Mid(fld.Code.Text, 9))
strTOC = Left(strTOC, Len(strTOC) - 3)
End If
Next
Set paraRange = rngTOC.Paragraphs(i).Range
Set startRange = paraRange.Words.First
startRange.Collapse wdCollapseStart
Set endRange = rngTOC.Paragraphs(i).Range.Words.Last
endRange.MoveUntil vbTab, wdBackward
endRange.Move wdCharacter, -1
rngItem.SetRange Start:=startRange.Start, End:=endRange.Start
rngItem.Hyperlinks.Add Anchor:=rngItem, SubAddress:=strTOC
nextparagraph:
Next i