Vba – How to remove hyperlinks from a Microsoft Word document

hyperlinklistboxms-wordvba

I'm writing a VB Macro to do some processing of documents for my work.
The lines of text are searched and the bracketed text is put in a list(box).

The problem comes when I want to remove all hyperlinks in the document and then generate new ones (not necessarily in the location of the original hyperlinks)

So the problem is How do I remove the existing hyperlinks?

My current issue is that every time a link gets added, the hyperlinks count goes up one, but when you delete it, the count does NOT reduce. (as a result I now have a document with 32 links – all empty except for 3 I put in myself – they do not show up in the document)

At the end of the code are my attempts at removing the hyperlinks.

Private Sub FindLinksV3_Click()

    ListOfLinks.Clear

    ListOfLinks.AddItem Now
    ListOfLinks.AddItem ("Test String 1")

    ListOfLinks.AddItem ActiveDocument.FullName

    SentenceCount = ActiveDocument.Sentences.Count
    ListOfLinks.AddItem ("Sentence Count:" & SentenceCount)
    counter = 0

    For Each myobject In ActiveDocument.Sentences    ' Iterate through each element.
        ListOfLinks.AddItem myobject
        counter = counter + 1

        BracketStart = (InStr(1, myobject, "("))

        If BracketStart > 0 Then
            BracketStop = (InStr(1, myobject, ")"))

            If BracketStop > 0 Then
                ListOfLinks.AddItem Mid$(myobject, BracketStart + 1, BracketStop - BracketStart - 1)

                ActiveDocument.Sentences(counter).Select

                ActiveDocument.Hyperlinks.Add Anchor:=Selection.Range, Address:= _
                "http://testnolink/" & counter, ScreenTip:=""  'TextToDisplay:=""

            End If
        End If
    Next

    'ActiveDocument.Sentences(1).Select
    '
    'Selection.Range.Hyperlinks(1).Delete

    ActiveDocument.Hyperlinks.Item(1).Delete

    Debug.Print ActiveDocument.Hyperlinks.Count

End Sub

Best Solution

This is an old post, so am adding this VBA code in case it is useful to someone.

Hyperlinks (Collections) need to be deleted in reverse order:

Sub RemoveHyperlinksInDoc()
    ' You need to delete collection members starting from the end going backwards
    With ActiveDocument
        For i = .Hyperlinks.Count To 1 Step -1
            .Hyperlinks(i).Delete
        Next
    End With 
End Sub

Sub RemoveHyperlinksInRange()
    ' You need to delete collection members starting from the end going backwards
    With Selection.Range
        For i = .Hyperlinks.Count To 1 Step -1
            .Hyperlinks(i).Delete
        Next
    End With    
End Sub