Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Anzeige
Inhaltsverzeichnis

Pfade per Makro aktualisieren

Forumthread: Pfade per Makro aktualisieren

Pfade per Makro aktualisieren
06.02.2025 12:48:43
hen34
Hallo,

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

10
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Pfade per Makro aktualisieren
06.02.2025 12:55:26
emkaes
Hallo

' Alte und neue Dateipfade definieren
oldLink = ""
newLink = ""


wenn du weder den alten Pfad noch den neuen Pfad dem Makro bekannt machst, was erwartest du dann?

Das Makro kann diese Angaben nicht aus deinen Gedanken lesen
AW: Pfade per Makro aktualisieren
06.02.2025 13:04:21
emkaes
Hi,

du mußt irgendwo eine Aufstellung haben, welcher alte Pfad durch welchen neuen Pfad ersetzt werden soll.

Hast du "Suchen-Ersetzen" probiert?

Für ein Makro kannst du die Aufstellung in ein Dictionary einlesen und dann über deine Links iterieren

VG emkaes
Anzeige
AW: Pfade per Makro aktualisieren
06.02.2025 13:47:41
hen34
Hallo,

wenn ich suchen-ersetzen wähle, dann passiert genau das selbe.

Ich SUCHE nach dem alten Pfad (es werden 22186 Zellen gefunden) und ERSETZE ihn durch den neuen. Excel arbeitet und es öffnet sich ein Explorer-Fenster, in dem ich dine Datei auswählen soll. Wenn ich dies tue und mit ok bestätige, dann schließt sich das Fenster kurz und öffnet sich sofort wieder, so, als solle ich erneut die neue Quelldatei auswählen.
Anzeige
AW: Pfade per Makro aktualisieren
06.02.2025 13:18:37
Uduuh
Hallo,
für jede zu ändernde Zelle über ein Explorer-Fenster den neuen Pfad bzw. die neue Datei auswählen.
Quatsch. 1x je Datei reicht.

Gruß aus'm Pott
Udo
AW: Pfade per Makro aktualisieren
06.02.2025 13:49:09
hen34
Hallo,

ich sitze hier vor dem Bildschirm und sehe, wie sich das Fenster immer wieder öffnet. Ich weiß auch, dass es eigentlich ausreichen sollte, die neue Datei 1x auszuwählen, das ist hier aber nicht der Fall.
Anzeige
AW: Pfade per Makro aktualisieren
06.02.2025 14:27:38
Ulf
Hi,
so ?

hth
Ulf
AW: Pfade per Makro aktualisieren
06.02.2025 15:16:02
Uduuh
Hallo,
ungetestet:
Sub PfadeErsetzen()

Dim arrFormeln, z As Long, s As Long, i As Integer
Dim arrALT, arrNEU

arrALT = Split("c:\AlterPfad1\,c:\AlterPfad2\,c:\AlterPfad3\", ",")
arrNEU = Split("c:\NeuerPfad1\,c:\NeuerPfad2\,c:\NeuerPfad3\", ",")

arrFormeln = Cells(1, 1).CurrentRegion.Formula

For z = 1 To UBound(arrFormeln, 1)
For s = 1 To UBound(arrFormeln, 2)
For i = 0 To UBound(arrALT)
arrFormeln(z, s) = Replace(arrFormeln(z, s), arrALT(i), arrNEU(i))
Next i
Next s
Next z

Cells(1, 1).CurrentRegion.Formula = arrFormeln
End Sub

Gruß aus'm Pott
Udo
Anzeige
AW: Pfade per Makro aktualisieren
06.02.2025 15:45:49
Piet
Hallo

ich sehe da gibt es schon einen prima Code von Uwe. Hier mal meine Idee für 1 Sheet oder ein ganzes Workbook.
Es setzt voraus das du ein Sheet "Pfade" anlegst, wo oldName und newName in Spalte A1:B6 stehen.

Hinweis: --> solche Tests bitte NIE in der Originaldatei durchführen, zuerst in einer Kopie Datei testen!

mfg Piet



Sub Links_ändern_Sheet() 'für ein Sheet
Dim AC As Range, oldPfad, newPfad
For Each AC In Sheets("Pfade").Range("A1:A6")
oldPfad = AC.Cells(1, 1)
newPfad = AC.Cells(1, 2)
Cells.Replace oldPfad, newPfad, xlPart
Next AC
End Sub


Sub Links_ändern_Full() 'Alle Sheets in Datei
Dim AC As Range, oldPfad, newPfad, Zahl
For Each AC In Sheets("Pfade").Range("A1:A6")
For j = 1 To Worksheets.Count
Zahl = Cells.SpecialCells(xlCellTypeFormulas).Count
If Zahl > 0 Then
oldPfad = AC.Cells(1, 1)
newPfad = AC.Cells(1, 2)
Cells.Replace oldPfad, newPfad, xlPart
End If
Next j
Next AC
End Sub
Anzeige
AW: Pfade per Makro aktualisieren
06.02.2025 13:01:38
hen34
Hallo,

ich habe die Pfade lediglich entfernt, da die tatsächlichen Pfade persönliche Informationen enthalten. Die neue Datei wird auch durch das Makro gefunden (wenn ich einen Pfad einfügen, des es in meinem System nicht gibt kommt eine Fehlermeldung) und der alte Link wird auch gefunden (wenn ich einen Pfad einsetze, den es in der Arbeitsmappe nicht gibt, erschient direkt die Box "Alle Verknüpfungen wurden aktualisiert")

Viele Grüße
Anzeige
AW: Pfade per Makro aktualisieren
06.02.2025 13:16:00
emkaes
Hi,

die msgbox ist nicht an Bedingungen geknüpft, die erscheint also immer, ob irgendetwas verändert wurde oder nicht.
Außerdem fehlt in der for each ws... Schleife noch ein schließendes NEXT

Hast du sonst noch etwas entfernt, was ggfs wichtig ist?

Pfade auf ihre Existenz zu prüfen macht man über die API MakeSureDirectoryPathexists. Damit wird ein "fehlender" Pfad automatisch angelegt, bei einem existierenden Pfad passiert nix, da ja auch kein Fehler

VG emkaes
Anzeige

Forumthreads zu verwandten Themen

Anzeige