2009-07-07 8 views
1

J'écris une macro VB pour faire un peu de traitement de documents pour mon travail. Les lignes de texte sont recherchées et le texte entre crochets est placé dans une liste (boîte).Comment supprimer des liens hypertexte d'un document Microsoft Word?

Le problème vient quand je veux supprimer tous les liens hypertexte dans le document et générer de nouvelles (pas nécessairement à l'emplacement des liens hypertexte d'origine)

Le problème est de savoir comment puis-je supprimer les liens hypertexte existants?

Mon problème actuel est que chaque fois qu'un lien est ajouté, le nombre d'hyperliens augmente d'un, mais lorsque vous le supprimez, le nombre ne diminue PAS. (par conséquent, j'ai maintenant un document avec 32 liens - tous vides sauf 3 que je mets moi-même - ils n'apparaissent pas dans le document)

A la fin du code sont mes tentatives pour supprimer les hyperliens.

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 

Répondre

2

La ligne supprimant le lien hypertexte est mise en commentaire. La ligne suivante supprime le premier lien hypertexte dans la plage sélectionnée:

Selection.Range.Hyperlinks(1).Delete 

Cela aussi décrémenter Selection.Range.Hyperlinks.Count par 1.

Pour voir comment le nombre de liens est que vous pouvez exécuter changer la méthode suivante sur un document :

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

D'abord, Merci divo pour corriger le désordre que je fait de l'affichage du code. C'est très apprécié par moi-même. OK, est-ce que je fais trop de transactions avec ActiveDocument.Hyperlinks.Count? (vraiment je veux pouvoir avoir un document principal que je peux coller diverses sources dedans, ceci peut être mis à jour fréquemment) Si je décommente le Selection.Range.Hyperlinks (1). Ligne de ligne il échoue toujours avec une erreur Erreur d'exécution "4198", ce que j'attribue aux liens hypertextes (1) ayant été effacé plus tôt ce matin ... mais mon ActiveDocument.Hyperlinks.Count est maintenant 49, (voir le commentaire ci-dessus est-ce un gros problème?) –

4

Ceci est un ancien article, donc j'ajoute ce code VBA au cas où il serait utile à quelqu'un.

Hyperliens (Collections) doivent être supprimés dans l'ordre inverse:

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 
Questions connexes