Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1536to1540
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Hyperlinks korrigieren

Hyperlinks korrigieren
19.01.2017 14:23:07
Hyperlink
Hallo liebes Forum,
für manchen sicher ein einfaches Problem...für mich leider nicht:
Wahrscheinlich durch ein MS-Update wurden sämtliche Links in einer Excel-Datei mit
C:\Users\BENUTZER\AppData\Roaming\Microsoft\Excel\... überschrieben. Ich möchte sie per VB-Script ändern. Es handelt sich um Links zu PDF-Dateien, die im gleichen Ordner liegen. Früher war der Netzwerkpfad vorangestellt, aber wenn die Dateien im gleichen Ordner liegen, benötigt man den Pfad nicht(ist auch günstiger, wenn der Ordner woanders hin kopiert wird). Im Script müßte noch getestet werden, ob der Hyperlink mit C:\Users\BENUTZER... beginnt, da einige Links schon manuell geändert wurden.
Ich hoffe, es hat jemand eine Lösung und es wird nicht zu kompliziert für mich.
Danke.

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Hyperlinks korrigieren
19.01.2017 17:02:03
Tino
Hallo,
kannst mal diesen Code testen.
Private Const MAX_PATH = 260
Private Const FILE_ATTRIBUTE_DIRECTORY = &H10
Private Const FILE_ATTRIBUTE_NORMAL = &H80
'API-Funktion deklarieren
Private Declare Function apiPathRelativePathTo Lib "shlwapi.dll" _
Alias "PathRelativePathToA" (ByVal pszPath As String, _
ByVal pszFrom As String, ByVal dwAttrFrom As Long, _
ByVal pszTo As String, ByVal dwAttrTo As Long) As Long
Public Function GetRelativePath(PathFrom As String, PathTo As String) As String
Dim pszPath As String
pszPath = Space(MAX_PATH)
'API-Funktion aufrufen
apiPathRelativePathTo pszPath, PathFrom, _
FILE_ATTRIBUTE_DIRECTORY, PathTo, FILE_ATTRIBUTE_NORMAL
'Rückgabe des relativierten Pfads
GetRelativePath = Left$(pszPath, InStr(pszPath, Chr(0)) - 1)
If GetRelativePath = "" Then GetRelativePath = PathTo
End Function
Sub Makro1()
Dim HypLink As Hyperlink
Dim PathFrom As String, PathTo As String
PathFrom = ThisWorkbook.Path
'Tabelle evtl. anpassen
For Each HypLink In Tabelle1.Hyperlinks
PathTo = HypLink.Address
PathTo = GetRelativePath(PathFrom, PathTo)
If PathTo  Hyp.Address Then
HypLink.Address = PathTo
End If
Next
End Sub
Gruß Tino
Anzeige
AW: Hyperlinks korrigieren
19.01.2017 17:14:01
UweD
Hallo
hab das mal so gemacht.
müßte noch getestet werden, ob der Hyperlink mit C:\Users\BENUTZER... beginnt, da einige Links schon manuell geändert wurden.
kann meiner meinung nach entfallen, da der Pfad bei manueller Änderung nicht gefunden und auch nicht mehr getauscht werden muss.
Sub HyperRename()
    Dim Pfad As String, Finden As String, TMPA As String, TMPT As String, HPL
    Pfad = ThisWorkbook.Path & "\"
    Finden = "C:\Users\BENUTZER\AppData\Roaming\Microsoft\Excel\"
    
    For Each HPL In Sheets("Tabelle1").Hyperlinks
        TMPA = Replace(HPL.Address, Finden, Pfad)
        TMPT = Replace(HPL.TextToDisplay, Finden, Pfad)
        HPL.Address = Replace(TMPA, " ", "%20")
        HPL.TextToDisplay = TMPT
    Next
End Sub
LG UweD
Anzeige
AW: Hyperlinks korrigieren
20.01.2017 10:54:05
Hyperlink
Danke Tino und UweD,
ich habe die Version von UweD noch etwas an die Datei angepasst.
Es waren ja mehrere Tabellenblätter "verseucht". (Es waren über 4000 Links, die korrigiert wurden.)
Der HyperLinkPfad wird auf den Pfad, wo die Excel-Datei steht, geändert. So, wie es sein sollte.
Also nochmals vielen Dank für die schnelle Hilfe. Letztlich sieht der Code dann folgendermaßen aus:
Sub HyperRename()
Dim Pfad As String, Finden As String, TMPA As String, TMPT As String, HPL
Dim WS_Count As Integer, Z As Integer, I As Integer
Pfad = ThisWorkbook.Path & "\"
Finden = "C:\Users\BENUTZER\AppData\Roaming\Microsoft\Excel\"
WS_Count = ActiveWorkbook.Worksheets.Count
Z = 0
For I = 1 To WS_Count
For Each HPL In Sheets(I).Hyperlinks
Z = Z + 1
TMPA = Replace(HPL.Address, Finden, Pfad)
TMPT = Replace(HPL.TextToDisplay, Finden, Pfad)
HPL.Address = Replace(TMPA, " ", "%20")
HPL.TextToDisplay = TMPT
Next HPL
Next I
MsgBox ("Anzahl Korrekturen: " & Z)
End Sub

Anzeige
Prima! Danke für die Rückmeldung.
20.01.2017 11:10:50
UweD
zu
20.01.2017 13:06:24
UweD

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige