Ich habe eine Tabelle mit ca. 900 Hyperlinks, deren relative Pfade ich in absolute Pfade ändern möchte.
Wie kann ich dies möglichst schnell erledigen?
Vielen Dank im Voraus!
Gruß
Jochen
hi Jochen
alt+f11 Taten drücken
erstelle 1 modul
und kopiere modul1(untenstehender code) hinein
dann kopiere code1 in die tabelle1
wechsel zu excel
lege in deine tabelle1 einen commandbutton1 an
''########################################################
'code1:
Option Explicit
'Verzeichniss einlesen als Hyperlink
Private Sub CommandButton1_Click()
Dim strInitialDir As String, strPath As String
Dim sFile As String, sPattern As String, sPath As String
Dim iRow As Integer
Columns(1).ClearContents
sPath = BrowseDirectory()
If sPath = "" Then Exit Sub
'einlesen
If Right(sPath, 1) <> "\" Then sPath = sPath & "\"
sPattern = "*.*"
sFile = Dir(sPath & sPattern)
Do Until sFile = ""
iRow = iRow + 1
ActiveSheet.Hyperlinks.Add Anchor:=Cells(iRow, 1), _
Address:=sPath & sFile, TextToDisplay:=sFile
sFile = Dir()
Loop
End Sub
'##########################################################
'MODUL1
Option Explicit
Private Declare Function SHBrowseForFolder Lib "shell32" _
(lpbi As BROWSEINFO) As Long
Private Declare Function SHGetPathFromIDList Lib "shell32" _
(ByVal pidList As Long, ByVal lpBuffer As String) As Long
Private Declare Sub CoTaskMemFree Lib "ole32.dll" (ByVal pv As Long)
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" _
(ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, _
lParam As Any) As Long
Private Declare Function SHSimpleIDListFromPath Lib "shell32" Alias "#162" _
(ByVal szPath As String) As Long
Private Const BIF_RETURNONLYFSDIRS As Long = 1
Private Const BIF_DONTGOBELOWDOMAIN As Long = 2
Private Const BFFM_INITIALIZED As Long = 1
Private Const MAX_PATH As Long = 260
Private Const WM_USER As Long = &H400
Private Const BFFM_SETSTATUSTEXTA As Long = (WM_USER + 100)
Private Const BFFM_SETSELECTIONA As Long = (WM_USER + 102)
Private Const BFFM_SETSELECTIONW As Long = (WM_USER + 103)
Private Const BFFM_SETSTATUSTEXTW As Long = (WM_USER + 104)
Private Type BROWSEINFO
hwndOwner As Long
pidlRoot As Long
pszDisplayName As String
lpszTitle As String
ulFlags As Long
lpfnCallback As Long
lParam As Long
iImage As Long
End Type
' Callback für die Browse-Directory-Methode - "pidList"-Methode
' zur Verwendung in der BrowseDirectory()-Funktion
Private Function BrowseCallBackProc(ByVal hWnd As Long, _
ByVal uMsg As Long, ByVal lParam As Long, _
ByVal lpData As Long) As Long
'Voreinstellung des Verzeichnisses im Verzeichnis-
'Dialog unter Verwendung des Parameters "pidList"
Select Case uMsg
Case BFFM_INITIALIZED
Call SendMessage(hWnd, BFFM_SETSELECTIONA, False, ByVal lpData)
Case Else
End Select
End Function
' Dummy-Methode, um den Inhalt des AddressOf-Operators zu erhalten und
' zur Verwendung in der BrowseDirectory()-Funktion zurückzugeben
Private Function FARPROC(pfn As Long) As Long
'Einstellen und Erhalten der Adresse für ein Callback. Das ist notwendig,
'weil man "AddressOf" nicht direkt einem benutzerdefinierten Typ zuweisen
'kann. Man kann es aber einer anderen Variablen vom Typ "Long" zuweisen,
'der - wie hier auch von der Function zurückgegeben - weiter verwendet
'werden kann.
FARPROC = pfn
End Function
' "pidList"-Parameter für den vorgegebenen Pfad wird durch den Aufruf
' der undokumenteierten API-Funktion #162 zurückgegeben.
Private Function GetPIDLFromPath(ByVal sPath As String) As Long
'If IsWinNT Then
GetPIDLFromPath = SHSimpleIDListFromPath(StrConv(sPath, vbUnicode))
'Else
' GetPIDLFromPath = SHSimpleIDListFromPath(sPath)
'End If
End Function
Public Function BrowseDirectory(Optional ByVal strInitialDir As String, Optional ByVal _
hWnd As Long) As String
Dim lpIDList As Long
Dim sBuffer As String
Dim szTitle As String
Dim tBrowseInfo As BROWSEINFO
szTitle = "Please select a directory"
With tBrowseInfo
.hwndOwner = hWnd
.pidlRoot = 0
.lpszTitle = szTitle
' .ulFlags = BIF_RETURNONLYFSDIRS + BIF_DONTGOBELOWDOMAIN
.lpfnCallback = FARPROC(AddressOf BrowseCallBackProc)
.lParam = GetPIDLFromPath(strInitialDir)
End With
lpIDList = SHBrowseForFolder(tBrowseInfo)
If (lpIDList) Then
sBuffer = Space(MAX_PATH)
SHGetPathFromIDList lpIDList, sBuffer
sBuffer = Left(sBuffer, InStr(sBuffer, vbNullChar) - 1)
BrowseDirectory = sBuffer
' Ressourcen freigeben
CoTaskMemFree lpIDList
Else
BrowseDirectory = strInitialDir
End If
' Ressourcen freigeben
CoTaskMemFree tBrowseInfo.lParam
End Function
Sub OrdnerAuswahl()
Dim strInitialDir As String, strPath As String
strPath = BrowseDirectory()
End Sub
gruss
ivan
Um relative Hyperlinks in absolute Links in Excel zu ändern, kannst du die folgende Schritt-für-Schritt-Anleitung befolgen. Dies erfordert ein wenig VBA (Visual Basic for Applications).
Öffne den VBA-Editor
Drücke ALT + F11, um den VBA-Editor zu öffnen.
Modul erstellen
Klicke im Menü Einfügen auf Modul, um ein neues Modul zu erstellen.
Code einfügen
Kopiere den folgenden VBA-Code in das Modul:
Option Explicit
Private Sub CommandButton1_Click()
Dim strPath As String
Dim sFile As String
Dim iRow As Integer
Columns(1).ClearContents
strPath = BrowseDirectory()
If strPath = "" Then Exit Sub
sFile = Dir(strPath & "*.*")
Do Until sFile = ""
iRow = iRow + 1
ActiveSheet.Hyperlinks.Add Anchor:=Cells(iRow, 1), _
Address:=strPath & sFile, TextToDisplay:=sFile
sFile = Dir()
Loop
End Sub
Private Function BrowseDirectory(Optional ByVal strInitialDir As String) As String
' Hier kommt der Code zur Auswahl des Verzeichnisses
End Function
Button hinzufügen
Wechsle zurück zu Excel und füge einen Button (CommandButton) hinzu. Du findest ihn unter den Entwicklertools.
Makro zuweisen
Klicke mit der rechten Maustaste auf den Button und wähle Makro zuweisen. Wähle das Makro CommandButton1_Click aus.
Hyperlinks generieren
Klicke auf den Button, um die Hyperlinks mit absoluten Pfaden zu generieren.
Fehler: "Pfad nicht gefunden"
Lösung: Stelle sicher, dass der angegebene Pfad korrekt ist und die Dateien wirklich vorhanden sind.
Fehler: Hyperlinks werden nicht erstellt
Lösung: Überprüfe, ob du die Hyperlinks in der richtigen Spalte erstellst und ob das Makro korrekt zugewiesen wurde.
Wenn du keine VBA-Programmierung verwenden möchtest, kannst du auch die folgenden Methoden in Betracht ziehen:
Manuelles Ändern von Hyperlinks
Klicke mit der rechten Maustaste auf den Link, wähle "Hyperlink bearbeiten" und ändere den Pfad manuell.
Excel-Funktionen verwenden
Nutze Funktionen wie HYPERLINK, um Links zu erstellen. Damit kannst du relative Links in absolute Links umwandeln, indem du den entsprechenden Pfad in die Funktion einfügst.
Beispiel 1:
Du hast einen relativen Link zu einer Datei wie .\Dokumente\Datei.docx. Um diesen in einen absoluten Link umzuwandeln, kannst du den vollständigen Pfad wie C:\Benutzer\DeinName\Dokumente\Datei.docx verwenden.
Beispiel 2:
Wenn du einen relativen Link hast, der auf ein Bild verweist, stelle sicher, dass der absolute Link den vollständigen Speicherort des Bildes enthält, um sicherzustellen, dass der Link überall funktioniert.
Verwende absolute Pfade für Datenquellen:
Wenn du mit einer Excel-Datenquelle arbeitest, ist es ratsam, absolute Links zu verwenden, um Probleme mit der Pfadfindung zu vermeiden.
Automatisiere den Prozess:
Überlege dir, ein VBA-Skript zu erstellen, das alle Hyperlinks in deiner Tabelle automatisch in absolute Pfade umwandelt. So sparst du viel Zeit, besonders bei großen Datenmengen.
1. Wie erkenne ich, ob ein Hyperlink relativ oder absolut ist?
Ein absoluter Link enthält den vollständigen Pfad, während ein relativer Link nur die Dateiposition relativ zum aktuellen Verzeichnis angibt.
2. Kann ich relative Links in Excel einfach manuell ändern?
Ja, du kannst das, aber bei einer großen Anzahl an Hyperlinks ist das sehr zeitaufwendig. Ein VBA-Makro ist hier effizienter.