I need to remove the hyperlinks from paragraph marks (as this causes us some issues).
Sometimes a hyperlink at the end of a paragraph might extend to include the paragraph mark, but it could also be that a single hyperlink is applied across multiple paragraphs (rare, but the code needs to account for this).
I can't really code, so have attempted to use Copilot for this (with manual troubleshooting), but after a lot of trial-and-error, I keep running into the same issues.
This is the current version:
Code:
Sub ReapplyHyperlinksWithoutRemovingText1()
Dim doc As Document
Dim hl As hyperlink
Dim hlRange As Range
Dim hlText As String
Dim startPos As Long
Dim endPos As Long
Dim i As Long
Dim hlAddress As String
Dim hlSubAddress As String
Dim partRange As Range
Set doc = ActiveDocument
' Loop through each hyperlink in the document
For Each hl In doc.Hyperlinks
Set hlRange = hl.Range
hlText = hlRange.Text
startPos = hlRange.Start
endPos = hlRange.End
hlAddress = hl.Address
hlSubAddress = hl.SubAddress
' Check if the hyperlink text contains a paragraph break
If InStr(hlText, vbCr) > 0 Or InStr(hlText, vbLf) > 0 Then
' Remove the hyperlink
hl.Delete
' Split the text by paragraph breaks
Dim parts() As String
parts = Split(hlText, vbCr)
' Reapply hyperlink to the first part only
If parts(0) <> "" Then
Set partRange = doc.Range(startPos, startPos + Len(parts(0)))
partRange.Hyperlinks.Add _
Anchor:=partRange, _
Address:=hlAddress, _
SubAddress:=hlSubAddress, _
TextToDisplay:=parts(0)
End If
End If
Next hl
End Sub
It splits such hyperlink texts into multiple strings (excluding the paragraph marks) and reapplies the hyperlink to each part (first removing the original hyperlink). After reapplying the hyperlink to the first part of a multi-paragraph link, it should update the startPos to be at the start of the next paragraph/part, but the code for this (startPos = partRange.End + 1) seemingly ended up inside the field code of the added hyperlink, throwing everything off. So that's why the macro now just fixes the first string in parts(). This is accecptable if there's no easy solution here (since actual multi-paragraph links are super rare).
Next, this code only handles this in the body text of the document, but I need it to also do this for footnotes. This I was also unable to get working. It was essentially the exact code, but wrapped inside "For Each footnote In doc.Footnotes; For Each hl In footnote.Range.Hyperlinks" - and it did find and remove the hyperlink in a footnote, but it then reapplied the hyperlink to the first link in the body text and not the footnote. No idea why.
Anyone able to help with at least getting this to run on footnots? It would be super helpful!