użycie przez zajf "adres względny a nie bezwzględny" zrozumiałem jako adres obszaru a nie scieżkę do zbioru danych tzw. ŁĄCZA
w zbiorze połączonym do danych w module kodu ThisWorkbook wkleić poniższy kod
przepraszam adaptowałem blok wyłuskiwania nazwy i musiałek kilka razy poprawić
Private Sub Workbook_Open()
Dim ArrLinks, i, ZbLnkName, ZbLnkFullName
With ThisWorkbook
' lista (łączy) linków tego zeszytu (ThisWorkbook) do innych zbiorow EXCEL'a
ArrLinks = .LinkSources(xlExcelLinks)
If Not IsArray(ArrLinks) Then Exit Sub ' nie ma linków
For i = LBound(ArrLinks) To UBound(ArrLinks)
ZbLnkName= ""
For j = Len(ArrLinks(i)) To 1 Step -1
If Mid(ArrLinks(i), j, 1) = "\" Then
ZbLnkName= Mid(ArrLinks(i), j + 1) 'nazwa zbioru bez ścieżki
Exit For
End If
Next
ZbLnkFullName = ThisWorkbook.Path & "\" & ZbLnkName
If UCase(ArrLinks(i)) Like UCase(ZbLnkFullName) Then 'link wskazuje na zbiór w tym samym katalogu co ThisWorkbook
' jest OK
ElseIf Len(Dir(ZbLnkFullName)) > 0 Then 'w katalogu w którym jest ThisWorkbook istnieje zbiór o nazwie występującej w linku
'UWAGA
' wystąpi błąd jeżeli ThisWorkbook ma zablokowane arkusze !!!!!
Application.DisplayAlerts = False 'wyłączenie pytania o zmianę linku
ThisWorkbook.ChangeLink ArrLinks(i), ZbLnkFullName
Application.DisplayAlerts = True
End If
Next i
End With
End Sub
'chyba nie trzeba tego użyć bo nastąpi automatycznie
'' do ThisWorkbook są jeszcze dwie metody wg HELP'a
''RefreshAll ' Method
''Refreshes all external data ranges and PivotTable reports in the specified workbook
''UpdateLink Method
''Updates a Microsoft Excel, DDE, or OLE link (or links). |