Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1812to1816
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

Verlorene Verlinkungen

Verlorene Verlinkungen
24.02.2021 17:45:01
Christoph
Hallo!
vielleicht könnt Ihr mir helfen. Durch Änderung eines Dateipfades sind alle Dateien fehlerhaft.
Nun möchte ich mit VBA alle Dateien öffnen, Pfad ändern, speichern und schließen. --> Das Funktioniert. (siehe code)
Problem: Leider befinden sich die Daten auf einer Arbeitsmappe welche versteckt (2 - xlSheetVeryHidden) und das VBA Projekt noch PW geschützt ist.
Hat jemand eine Idee?
Function ReplacePath(oldpath As String, newpath As String)
Cells.Replace What:=oldpath, Replacement:=newpath, LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False
End Function
Sub ChangeMultipleFiles()
FOLDER_EXCELFILES = Worksheets("Tabelle1").Cells(1, 1).Value
Set fso = CreateObject("Scripting.Filesystemobject")
Set folderExcelFiles = fso.GetFolder(FOLDER_EXCELFILES)
For Each file In folderExcelFiles.Files
ext = Right(file.Name, Len(file.Name) - InStrRev(file.Name, "."))
If LCase(ext) = "xlsm" Or LCase(ext) = "xlsx" Then
Dim doc As Workbook
Debug.Print file.Path
Set doc = Application.Workbooks.Open(file.Path, 0)
ReplacePath "L:\Order Management\00 - Orders I Bestellungen I Objednavky I Narocila\ _
_Formular\", "L:\VID\00 - Orders I Bestellungen I Objednavky I Narocila\_Formular\"
doc.Save
doc.Close
End If
Next
End Sub

LG
Christoph

11
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Verlorene Verlinkungen
24.02.2021 18:05:37
Nepumuk
Hallo Christoph,
teste mal:
Option Explicit

Public Sub ChangeMultipleFiles()
    
    Dim strFolder As String, strFilename As String
    Dim objWorkbook As Workbook
    
    strFolder = Worksheets("Tabelle1").Cells(1, 1).Value
    
    If Right$(strFolder, 1) <> "\" Then strFolder = strFolder & "\"
    
    strFilename = Dir$(strFolder & "*.xls*")
    
    Do Until strFilename = vbNullString
        
        Set objWorkbook = Workbooks.Open(Filename:=strFolder & strFilename)
        
        Call ReplacePath("L:\Order Management\00 - Orders I Bestellungen I Objednavky I Narocila\_Formular\", _
            "L:\VID\00 - Orders I Bestellungen I Objednavky I Narocila\_Formular\", objWorkbook)
        
        Call objWorkbook.Close(SaveChanges:=True)
        
        strFilename = Dir$
        
    Loop
    
    Set objWorkbook = Nothing
    
End Sub

Private Sub ReplacePath(oldpath As String, newpath As String, objWorkbook As Workbook)
    
    Dim objWorksheet As Worksheet
    
    For Each objWorksheet In objWorkbook.Worksheets
        
        objWorksheet.Cells.Replace What:=oldpath, Replacement:=newpath, LookAt:=xlPart
        
    Next
End Sub

Gruß
Nepumuk
Anzeige
AW: Verlorene Verlinkungen
24.02.2021 20:15:10
Christoph
Dank für die schnelle Antwort.
Es geht. Leider jedoch sehr sehr langsam und wenn die Dokumente geöffnet werden, muss man manuell die Fehlermeldung bezüglich fehlerhafte Verknüpfung bestätigen. Hast du eine Idee wie man das beschleunigen kann? Danke!
AW: Verlorene Verlinkungen
24.02.2021 20:26:07
Nepumuk
Hallo Christoph,
teste mal:
Option Explicit

Public Sub ChangeMultipleFiles()
    
    Dim strFolder As String, strFilename As String
    Dim objWorkbook As Workbook
    
    With Application
        .AskToUpdateLinks = False
        .Calculation = xlCalculationManual
        .DisplayAlerts = False
        .EnableEvents = False
        .ScreenUpdating = False
    End With
    
    strFolder = Worksheets("Tabelle1").Cells(1, 1).Value
    
    If Right$(strFolder, 1) <> "\" Then strFolder = strFolder & "\"
    
    strFilename = Dir$(strFolder & "*.xls*")
    
    Do Until strFilename = vbNullString
        
        Set objWorkbook = Workbooks.Open(Filename:=strFolder & strFilename, UpdateLinks:=0)
        
        Call ReplacePath("L:\Order Management\00 - Orders I Bestellungen I Objednavky I Narocila\_Formular\", _
            "L:\VID\00 - Orders I Bestellungen I Objednavky I Narocila\_Formular\", objWorkbook)
        
        Call objWorkbook.Close(SaveChanges:=True)
        
        strFilename = Dir$
        
    Loop
    
    Set objWorkbook = Nothing
    
    With Application
        .AskToUpdateLinks = True
        .Calculation = xlCalculationAutomatic
        .DisplayAlerts = True
        .EnableEvents = True
        .ScreenUpdating = True
    End With
End Sub

Private Sub ReplacePath(oldpath As String, newpath As String, objWorkbook As Workbook)
    
    Dim objWorksheet As Worksheet
    
    For Each objWorksheet In objWorkbook.Worksheets
        
        objWorksheet.Cells.Replace What:=oldpath, Replacement:=newpath, LookAt:=xlPart
        
    Next
End Sub

Gruß
Nepumuk
Anzeige
AW: Verlorene Verlinkungen
24.02.2021 20:51:14
Christoph
Leider keine Verbesserung. Läuft ewig und die Datei hängt sich auf.
AW: Verlorene Verlinkungen
24.02.2021 20:52:55
Nepumuk
Hallo Christoph,
kann ich natürlich nicht nachvollziehen.
Gruß
Nepumuk
AW: Verlorene Verlinkungen
24.02.2021 20:54:07
Christoph
Jetzt kam ein Fehler bei
Call objWorkbook.Close(SaveChanges:=True)
AW: Verlorene Verlinkungen
24.02.2021 21:10:03
Christoph
VBA Projekt ist noch PW geschützt ist. Es dürfte daran liegen
LG
Christoph
AW: Verlorene Verlinkungen
24.02.2021 21:17:07
Nepumuk
Hallo Christoph,
daran kann es eigentlich nicht liegen. Aber weiterhelfen kann ich dir nicht da ich die Mappen nicht habe.
Gruß
Nepumuk
AW: Verlorene Verlinkungen
24.02.2021 21:21:26
Christoph
Stell mal das File rein. Vielleicht fällt dir noch was auf ;-)
https://www.herber.de/bbs/user/144224.xlsm
Anzeige
AW: Verlorene Verlinkungen
25.02.2021 09:59:49
Nepumuk
Hallo Christoph,
eine Mappe mit dem Makro habe ich selbst. Ich teste ja meistens das was ich poste.
Setz mal die Zeile "Set objWorkbook = Nothing" hinter das schließen der Mappe:
Do Until strFilename = vbNullString
    
    Set objWorkbook = Workbooks.Open(Filename:=strFolder & strFilename, UpdateLinks:=0)
    
    Call ReplacePath("L:\Order Management\00 - Orders I Bestellungen I Objednavky I Narocila\_Formular\", _
        "L:\VID\00 - Orders I Bestellungen I Objednavky I Narocila\_Formular\", objWorkbook)
    
    Call objWorkbook.Close(SaveChanges:=True)
    
    Set objWorkbook = Nothing
    
    strFilename = Dir$
    
Loop

Gruß
Nepumuk
Anzeige
AW: Verlorene Verlinkungen
26.02.2021 20:00:46
Christoph
Hat leider nichts verbesser.
Habe auch eine verknüpfte Grafik mit dem Pfad.
LG
Christoph

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige