300 Aufrufe
Gefragt in Tabellenkalkulation von
Hallo Zusammen,

Ich habe in einem Verzeichnis in verschiedenen Ordnern insgesamt 14'000 Exceldateien.

Alle diese Exceldateien beinhalten Hyperlinks die auf eine andere Exceldatei zugreifen.

Die 14'000 Dateien und die einzelne Datei werden in ein anderes Laufwerk verschoben.

Gibt es irgendein Script o.Ä. das ich bei allen 14000 Dateien den Pfad gleichzeitig ändern kann?

Danke schonmals

Gruss

10 Antworten

0 Punkte
Beantwortet von
Mit vba könnte man da schon was machen wird allerdings eine zeit lang laufen und Sicherheitskopien wären nicht verkehrt ;)

Also angenommen Du hast eine Liste der Dateien in einem Excel von A1 bis A14000

dann könntest Du es mit diesem Code als Basis versuchen

Option Explicit
Sub Makro1()
Dim i
i = 1
Do Until Cells(i, 1) = ""
   Workbooks.Open Filename:=Cells(i, 1)
     Call Makro2
   ActiveWorkbook.Save
   ActiveWorkbook.Close
i = i + 1
Loop
End Sub

Sub Makro2()
Dim mylink, newLink
Dim altesLW, neuesLW
altesLW = ""
neuesLW = ""

On Error Resume Next
For Each mylink In ActiveWorkbook.LinkSources
        newLink = Replace(mylink, altesLW, neuesLW)
        ActiveWorkbook.ChangeLink Name:= _
            mylink, NewName:= _
            newLink, Type:=xlExcelLinks
 
 Next
End Sub

oder

Wenn es alles xlsx und xlsm files sind könnte man z.B.: mit powershell die Dateien die ja als zip Dateien gespeichert sind als solche öffnen und umschreiben (ist aber nicht ganz trivial) - aber wenn Du jemanden  IT affinen hast der Dir da hilft wahrscheinlich die nachhaltigste Lösung.
0 Punkte
Beantwortet von halfstone Profi (18.1k Punkte)
Hallo,

wie ist denn die Struktur der Hyperlinks aufgebaut, kannst du da mal ein Beispiel geben, also von was zu was so ein Link geändert werden sollte, welches Format der hat usw.?

Gruß Fabian
0 Punkte
Beantwortet von

Danke vielmals für eure Antworten. 

Also um das kurz zu beschreiben.

Es sind 14000 einzelne .xls Dateien die in unterschiedlichen Ordnern liegen (nach Jahr sortiert). 

Der Dateipfad sieht wie folgend aus: Z.B. "H:\Marketing\Preis\Offerten 2022\Italien"

=B78/'K:\Variablen\[Devisenkurse.xls]Devisenkurse'!$C$11

Alle diese Dateien holen den Link aus der einen Excel Datei K:\Variablen

Der neue Pfad von den 14000 Dateien wird dann so aussehen:

 "O:\Verkauf\Marketing\Preis\Offerten 2022\Italien"

und die verlinkte Datei:  "O:\Verkauf\Marketing\Preis\Variablen"

Ich hoffe hier gibt es eine Lösung :-/

Gruss Julian

0 Punkte
Beantwortet von

Es gibt vielleicht eine sehr einfache (allerdings wenig nachhaltige) Möglichkeit, wenn der Laufwerkbuchstabe K: künftig frei bliebe könnte man ihn als O:\Verkauf\Marketing\Preis definieren und die verlinkte Datei wäre dann sowohl als O:\Verkauf\Marketing\Preis\Variablen" als auch K:\Variablen ansprechbar (müssten aber alle die damit arbeiten einrichten)

oder wie schon angesprochen, du nimmst eine Liste der Dateien kopierst sie in eine Neue xlsm Excel Datei (angenommen Spalte A) 

und arbeitest mit dem folgenden Code (natürlich zum Test mal mit einigen wenigen und davor gesicherten Dateien)

Option Explicit
Sub meneSchleife()
Dim i
i = 1
Do Until Cells(i, 1) = ""
   Workbooks.Open Filename:=Cells(i, 1)
     Call Linkanpassen
   ActiveWorkbook.Save
   ActiveWorkbook.Close
i = i + 1
Loop
End Sub

Sub
Linkanpassen()
Dim mylink, newLink

newLink = "O:\Verkauf\Marketing\Preis\Variablen\Devisenkurse.xls"
On Error Resume Next
For Each mylink In ActiveWorkbook.LinkSources
     If  mylink = "
K:\Variablen\Devisenkurse.xls" Then
        ActiveWorkbook.ChangeLink Name:= _
            mylink, NewName:= _
            newLink, Type:=xlExcelLinks
    End If
 Next
End Sub

das wird dann für 14.000 Dateien allerdings schon eine schöne Zeit lang laufen (und das Speicherdatum ändert sich)

deswegen auch die Anmerkung beim vorherigen post es einen IT-Profi in der Frima mit powershell machen zu lassen

Alternativ könnte man den Code auch in ein Addin verpacken (und anpassen), sodass er eine Datei umlinkt sobald man sie öffnet (das müssten dann aber auch alle Nutzer aktivieren!)

0 Punkte
Beantwortet von
Super hat alles geklappt, danke dir!!!

Gruss Julian :)
0 Punkte
Beantwortet von
Hallo nochmals,

Das mit den Dateien hat mit paar Ausnahmen super geklappt.

Jetzt sind noch 500 .xltx und .xlsx Dateien übrig, bei denen man auch den gleichen Link ändern muss.

Mit dem Script geht es nur mit den .xls Dateien.

Wie kann ich das noch ändern? Gruss Julian
0 Punkte
Beantwortet von

Guten Morgen,

dazu bräuchte ich das genaue Problem, da ich dass script eigentlich nur mit xlsx Dateien erstellt habe wundert es mich nämlich ;)

bricht es ab oder passiert nur nichts ?

Ist bei diesen der Verweis auch auf "K:\Variablen\Devisenkurse.xls" oder auch auf eine xlsx  - Datei (das müsste man im script dann natürlich nachziehen)

0 Punkte
Beantwortet von

Also alles ist genau gleich. 

K:\Variablen\Devisenkurse.xls bleibt als Korrekturlink.

Ich lasse es ganz normal laufen wie bei den xls Dateien und es bricht auch nicht ab. Aber die xltx Dateien werden nicht gespeichert. 

Gruss Julian

0 Punkte
Beantwortet von
Guten Morgen,

für xltx files (aber hoffentlich nicht für xlsx) muss man den ersten Teil ein wenig anpassen, weil er templates anders behandelt nur schreibgeschützt öffnet und daher nicht speichert)

Option Explicit
Sub meneSchleife()
Dim i
Dim myFilename As String
i = 1

Do Until Cells(i, 1) = ""
   myFilename = Cells(i, 1)
   Workbooks.Open Filename:=Cells(i, 1)
     Call Linkanpassen
    Application.DisplayAlerts = False
   ActiveWorkbook.SaveAs Filename:=myFilename, FileFormat:=xlOpenXMLTemplate
   Application.DisplayAlerts = True
   ActiveWorkbook.Close
i = i + 1
Loop
End Sub
0 Punkte
Beantwortet von
Super hat geklappt.

Nochmals dir vielen Dank :)
...