Excel lien Hypertexte mise à jour en masse

j'ai une feuille de calcul avec des milliers de lignes. Chaque ligne contient un hyperlien avec un chemin.

le chemin n'est pas valide, mais il peut être facilement corrigé en remplaçant la première partie par la valeur correcte.

Example: current hyperlink: F:Helpindex.html

Needed: P:SystemHelpindex.html

le problème est que standard Find / Replace ne "voit" pas le contenu des hyperliens.

Est la seule façon d'écrire une macro ou est-il un autre moyen de le faire?

15
demandé sur IMHO 2010-05-10 21:51:56

5 réponses

Je ne connais pas d'autre solution qu'une macro. Mais on dirait que quelqu'un déjà écrit un pour le faire.

Public Sub ReplaceHyperlinkURL(FindString As String, ReplaceString As String) Dim LinkURL As String Dim PreStr As String Dim PostStr As String Dim NewURL As String Dim FindPos As Integer Dim ReplaceLen As Integer Dim URLLen As Integer Dim MyDoc As Worksheet Dim MyCell As Range On Error GoTo ErrHandler Set MyDoc = ActiveSheet For Each MyCell In MyDoc.UsedRange If MyCell.Hyperlinks.Count > 0 Then LinkURL = MyCell(1).Hyperlinks(1).Address FindPos = InStr(1, LinkURL, FindString) If FindPos > 0 Then 'If FindString is found ReplaceLen = Len(FindString) URLLen = Len(LinkURL) PreStr = Mid(LinkURL, 1, FindPos - 1) PostStr = Mid(LinkURL, FindPos + ReplaceLen, URLLen) NewURL = PreStr & ReplaceString & PostStr MyCell(1).Hyperlinks(1).Address = NewURL 'Change the URL End If End If Next MyCell Exit Sub ErrHandler: MsgBox ("ReplaceHyperlinkURL error") End Sub Public Sub WBReplaceHyperlinkURL(FindString As String, ReplaceString As String) 'For all sheets in the workbook Dim LinkURL As String Dim PreStr As String Dim PostStr As String Dim NewURL As String Dim FindPos As Integer Dim ReplaceLen As Integer Dim URLLen As Integer Dim MyDoc As Worksheet Dim MyCell As Range On Error GoTo ErrHandler For Each WS In Worksheets WS.Activate Set MyDoc = ActiveSheet For Each MyCell In MyDoc.UsedRange If MyCell.Hyperlinks.Count > 0 Then LinkURL = MyCell(1).Hyperlinks(1).Address FindPos = InStr(1, LinkURL, FindString) If FindPos > 0 Then 'If FindString is found ReplaceLen = Len(FindString) URLLen = Len(LinkURL) PreStr = Mid(LinkURL, 1, FindPos - 1) PostStr = Mid(LinkURL, FindPos + ReplaceLen, URLLen) NewURL = PreStr & ReplaceString & PostStr MyCell(1).Hyperlinks(1).Address = NewURL 'Change the URL End If End If Next MyCell Next WS MsgBox ("Hyperlink Replacement Complete") Exit Sub ErrHandler: MsgBox ("ReplaceHyperlinkURL error") End Sub

le code doit être placé dans un module de code VBA. À partir d'une feuille de calcul, ouvrir L'éditeur VBA dans le ruban des développeurs. Le ruban de développeur peut être activé dans L'onglet populaire des Options Excel. Puis sélectionnez Insérer - Module dans le menu. Copiez le code et le coller dans le module. Puis enregistrez le module.

afin de lancez la procédure, créez une macro qui contient: line et exécutez la macro dans Excel. Assurez-vous de remplacer le FindText par la partie de l'adresse que vous voulez trouver et Remplace la le texte que vous souhaitez remplacer.

Call ReplaceHyperlinkURL("FindText", "ReplaceText")

s'il Vous Plaît assurez-vous de faire une copie de sauvegarde de votre tableur avant exécuter la macro juste au cas où une erreur est faite dans le FindText ou Remplaçetext. Si vous voulez effectuer la recherche et remplacer sur tous les feuilles dans les le cahier d'EXERCICES, utilisez la routine WBReplaceHyperlinkURL plutôt que Remplaçehyperlinkurl.

8
répondu dcp 2018-08-20 19:17:04

Hé cnx.org façon de réinventer la fonction Remplacer.

Sub FindReplaceHLinks(sFind As String, sReplace As String, _
    Optional lStart As Long = 1, Optional lCount As Long = -1)

    Dim rCell As Range
    Dim hl As Hyperlink

    For Each rCell In ActiveSheet.UsedRange.Cells
        If rCell.Hyperlinks.Count > 0 Then
            For Each hl In rCell.Hyperlinks
                hl.Address = Replace(hl.Address, sFind, sReplace, lStart, lCount, vbTextCompare)
            Next hl
        End If
    Next rCell
End Sub

Sub Doit()

    FindReplaceHLinks "F:\help\", "F:\SystemHelp\"

End Sub
13
répondu Dick Kusleika 2010-05-10 20:47:56

Pas besoin d'une macro

attention: certaines choses comme les graphiques etc peuvent être perdus, cependant les formules et les formats semblent être préservés.

  • sauvegarder le document comme feuille de calcul XML

  • ouvrir le fichier avec bloc-notes

  • "Remplacer tout" à partir de "mal chaîne de texte" à "corriger chaîne de texte"

  • Save

  • Ouvrir le fichier avec Excel

  • Enregistrer le document dans le format original

10
répondu TheChemist 2014-12-08 15:30:38

une autre façon est d'insérer un caractère 'donc c'est tout du texte, à la recherche et remplacer et puis passer et supprimer les caractères'.

1
répondu Larry Hirsch 2013-09-19 00:58:54

voici ce que j'utilise habituellement dans ce but (puisque je n'ai jamais été à l'aise avec les macros ou les scripts VB). Cela n'affectera aucun formatage - tous vos graphiques et Graphiques resteront tels quels.

  1. Renommer .xlsx ou .xls fichier .zip

  2. décompresser et éditer le .xml ou xml.rels le fichier à l'intérieur avec un éditeur de texte de votre choix

  3. Renommer le .zip fichier .xlsx (ou .xls)

c'est tout.

Pour l'étape 2, vous pouvez choisir l'une des manières suivantes:

  1. éditer directement à l'intérieur du .zip fichier OU

  2. extraire le .zip, puis éditez le(S) fichier (s) à l'extérieur du .zip et ensuite le replacer dans le .zip glisser et déposer OU

  3. Décompresser le fichier .zip, faire de la édite et zip de nouveau en utilisant seulement l'Explorateur de windows (clic droit > Envoyer à > compressé (zippé) le dossier).

les feuilles de travail sont généralement situées à l'intérieur du .zip dans le chemin d'accès suivant xl > worksheets. Parfois, les liens sont stockés dans le .rels les fichiers stockés dans xl > worksheets > rels

1
répondu Pranav Rai 2018-06-04 05:13:34