2009-07-07 2 views
1

Я пишу макрос VB для обработки документов для своей работы. Строки текста просматриваются, а текст в квадратных скобках помещается в список (поле).Как удалить гиперссылки из документа Microsoft Word?

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

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

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

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

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 

ответ

2

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

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 
+0

первого, благодаря Диву для исправления беспорядок я сделал размещение кода. Это очень ценится мной. Хорошо, я делаю слишком большую сделку с ActiveDocument.Hyperlinks.Count? (действительно, я хочу иметь основной документ, в который можно вставлять различные источники, это может часто обновляться) Если я раскомментирую строку Selection.Range.Hyperlinks (1) .Delete, она по-прежнему терпит неудачу с ошибкой Runtime error «4198», это я связываю с гиперссылками (1), которые были удалены ранее этим утром ... но мой ActiveDocument.Hyperlinks.Count теперь 49, (см. Выше комментарий о том, что это большая проблема?) – 2009-07-07 11:54:40

4

Это старый пост, поэтому я добавляю этот код 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 
Смежные вопросы