Как удалить гиперссылки из документа Microsoft Word?

Я пишу макрос VB, чтобы выполнить некоторую обработку документов для моей работы. В строках текста выполняется поиск, и текст в квадратных скобках помещается в список (поле).

Проблема возникает, когда я хочу удалить все гиперссылки в документе, а затем создать новые (не обязательно в месте исходных гиперссылок).

Итак, проблема в том, как удалить существующие гиперссылки?

Моя текущая проблема заключается в том, что каждый раз, когда добавляется ссылка, количество гиперссылок увеличивается на единицу, но когда вы ее удаляете, количество НЕ уменьшается. (в результате у меня теперь есть документ с 32 ссылками - все пустые, кроме трех, которые я вставил сам - они не отображаются в документе)

В конце кода мои попытки удалить гиперссылки.

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

person Community    schedule 07.07.2009    source источник


Ответы (2)


Это старый пост, поэтому я добавляю этот код VBA на случай, если он кому-то будет полезен.

Гиперссылки (Коллекции) нужно удалять в обратном порядке:

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
person Mike Whyte    schedule 10.06.2011

Строка, удаляющая гиперссылку, закомментирована. Следующая строка удалит первую гиперссылку в выбранном диапазоне:

Selection.Range.Hyperlinks(1).Delete

Это также уменьшит Selection.Range.Hyperlinks.Count на 1.

Чтобы увидеть, как меняется количество ссылок, вы можете запустить в документе следующий метод:

Sub AddAndRemoveHyperlink()

    Dim oRange As Range
    Set oRange = ActiveDocument.Range
    oRange.Collapse wdCollapseStart
    oRange.MoveEnd wdCharacter

    Debug.Print ActiveDocument.Range.Hyperlinks.Count

    ActiveDocument.Hyperlinks.Add oRange, "http://www.example.com"
    Debug.Print ActiveDocument.Range.Hyperlinks.Count

    ActiveDocument.Hyperlinks.Item(1).Delete
    Debug.Print ActiveDocument.Range.Hyperlinks.Count

End Sub
person Dirk Vollmar    schedule 07.07.2009
comment
Во-первых, спасибо divo за исправление беспорядка, который я сделал при публикации кода. Я очень это ценю. Хорошо, я слишком много делаю с ActiveDocument.Hyperlinks.Count? (на самом деле я хочу иметь мастер-документ, в который я могу вставлять различные источники, он может часто обновляться) Если я раскомментирую строку Selection.Range.Hyperlinks (1) .Delete, она все равно не сработает с ошибкой Ошибка выполнения 4198, я приписываю это гиперссылкам (1), которые были удалены ранее сегодня утром ... но моему ActiveDocument.Hyperlinks.Count теперь 49 (см. выше комментарий о том, является ли это большой проблемой?) - person ; 07.07.2009