Pfade per Makro aktualisieren
06.02.2025 12:48:43
hen34
ich habe ein Problem mit der Aktualisierung von Datei-Pfaden.
In einer Zelle sollen Zellinhalte aus mehreren anderen Excel-Dateien addiert werden. Aufgrund einer Änderung der Ordnerstruktur haben sich jetzt die Datei-Pfade geändert.
Wenn ich über die "Links Verwalten" Funktion von Excel selber versuche, die Pfade zu aktualisieren, dann muss ich für jede zu ändernde Zelle über ein Explorer-Fenster den neuen Pfad bzw. die neue Datei auswählen. Bei ca. 21.000 Zellen und jeweils 6 Pfaden, welche ich aktualisieren muss halte ich das für nicht umsetzbar.
Ich hatte dann versucht, mir über eine Suchmaschine und Chat-GPT ein Makro zu basteln, welches mir helfen kann. Hierbei bin ich aber auf das selbe Problem gestoßen. Das Makro startet. findet die neue Quelldatei, findet die Verknüpfungen, welches es zu aktualisieren gilt und öffnet dann fleißig Explorer Fenster.
Geht das auch mit einem Klick pro neu zu definierendem Pfad? Hier einmal das Makro, welches die KI mir vorgeschlagen hat:
Sub UpdateAllLinksEnhanced_NoAlertsOff()
Dim oldLink As String, newLink As String
Dim ws As Worksheet
Dim links As Variant, i As Long
Dim nm As Name
Dim chObj As ChartObject
Dim ser As Series
' Alte und neue Dateipfade definieren
oldLink = ""
newLink = ""
' Sicherstellen, dass die neue Datei existiert
If Dir(newLink) = "" Then
MsgBox "Die Datei " & newLink & " wurde nicht gefunden. Bitte überprüfe den Pfad.", vbCritical
Exit Sub
End If
' 1. Externe Links über ChangeLink aktualisieren
links = ThisWorkbook.LinkSources(Type:=xlLinkTypeExcelLinks)
If Not IsEmpty(links) Then
For i = LBound(links) To UBound(links)
If InStr(links(i), oldLink) > 0 Then
ThisWorkbook.ChangeLink Name:=links(i), NewName:=newLink, _
Type:=xlLinkTypeExcelLinks
End If
Next i
End If
' 2. Zellinhalte in allen Arbeitsblättern anpassen (Formeln, Texte etc.)
For Each ws In ThisWorkbook.Worksheets
ws.Cells.Replace What:=oldLink, Replacement:=newLink, LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False
' 3. Aktualisieren von definierten Namen (Namensmanager)
For Each nm In ThisWorkbook.Names
If InStr(nm.RefersTo, oldLink) > 0 Then
nm.RefersTo = Replace(nm.RefersTo, oldLink, newLink)
End If
Next nm
MsgBox "Alle Verknüpfungen wurden aktualisiert!", vbInformation, "Fertig"
End Sub
Vielen Dank im voraus.
Anzeige