Verknüpfungen - Spur zum Nachfolger
#1
Hallo Experten
 
Mit Menü Daten > Verknüpfungen bearbeiten kann ich feststellen, welche (auch geschlossenen) Dateien die aktuelle Arbeitsmappe mit Daten beliefern.
 
Wie kann ich nun mit meinem Excel 2016 umgekehrt auch ermitteln, an welche (auch geschlossenen) Dateien von hier aus Daten geliefert werden?   Also dateiübergreifend "Spur zum Nachfolger" statt "Spur zum Vorgänger".  Ist das überhaupt möglich?
 
Herzlichen Dank für entsprechende Hinweise.
 
Gruss,
Peter
Windows 10 / Office Professional Plus 2016.
Rückmeldungen machen immer Freude.
Antworten Top
#2
Hallo,

ich bin mir nicht sicher ob ich das richtig verstanden habe:

Du hast Datei_1 mit den Quelldaten. Diese Daten, oder Teile davon, werden über Formeln in Datei_2 geholt. In Datei_2 kannst du jetzt Spur zum Vorgänger wählen oder Daten - Verbindungen und dann wir dir angezeigt woher die Daten kommen. Soweit so gut.

Du willst dir jetzt aber in Datei_1 anzeigen lassen welche andere Exceldateien von dieser Datei "beliefert" werden, obwohl aktuell nur die Datei_1 geöffnet ist und die Datei_2 die "beliefert" wird, geschlossen ist?

Ich würde jetzt behaupten, dass das nicht geht da XL zu diesem Zeitpunkt keine Möglichkeit hat zu erkennen, dass Daten "irgendwann" aus dieser Datei ausgelesen werden.

Aber ich bin mir a) nicht sicher ob ich dein Problem richtig verstanden habe und b) erstaunen mich Excel und seine Möglichkeiten immer wieder und es würde mich nicht überraschen wenn jemand mit einer entsprechenden Lösung um die Ecke kommt.
Gruß
Peter
Antworten Top
#3
(10.04.2023, 16:32)Pagsanjan schrieb: lso dateiübergreifend "Spur zum Nachfolger"
Öffne alle Excel-Dateien auf deinem Rechner und schaue nach ob es dort Verknüpfungen zu deiner Ausgangsdatei gibt.
Wir sehen uns!
... Detlef

Meine Beiträge können Ironie oder Sarkasmus enthalten.

Antworten Top
#4
Hallo Peter

Herzlichen Dank für deine Antwort. 

@ a) Ja, du hast das absolut richtig verstanden - so ist es.

@ b) Dass das nicht so einfach geht wie umgekehrt, habe ich vermutet.  Ich glaube mich jedoch zu erinnern, dass ich kürzlich irgendwo eine Lösung dazu gelesen habe, weiss aber nicht mehr wo, und wie diese geht.

Bleibt zu hoffen, dass jemand mit einer überraschenden Lösung um die Ecke kommt - sehr zuversichtlich bin ich jedoch nicht.

Deine Antwort hat mich in dieser Frage dennoch weiter gebracht.  Danke.

Gruss,
Peter
Windows 10 / Office Professional Plus 2016.
Rückmeldungen machen immer Freude.
Antworten Top
#5
Hallo shift-del

Vielen Dank für deinen Vorschlag.

Ja, diese Lösungsmöglichkeit ist mir bekannt.  Das Problem ist nur, dass ich auf meinem Rechner sehr viele Excel-Dateien habe, viel mehr, als mein RAM gleichzeitig zu verkraften vermag.  Also eine ziemlich langwierige Angelegenheit, bis alle auf diese Weise geprüft und abgearbeitet sind.

Dennoch Dankeschön!

Gruss,
Peter
Windows 10 / Office Professional Plus 2016.
Rückmeldungen machen immer Freude.
Antworten Top
#6
Hi,

(10.04.2023, 23:57)Pagsanjan schrieb: viel mehr, als mein RAM gleichzeitig zu verkraften vermag
Man braucht die Dateien ja noch gleichzeitig zu öffnen...

Allerdings dauert ein normales Öffnen ja auch viel zu lange (da Excel noch viele Dinge beim Öffnen erledigt). Daher wäre es sinnvoll, die Datei selbst zu analysieren. Eine (aktuelle) Excel-Datei ist ja im Grunde nichts anderes als ein Zip-Archiv. Wenn man dieses analysiert, findet man sehr schnell den Pfad \xl\externalLinks\_rels und dort in meiner einfachen Test-Datei mit Links auf zwei externe Dateien die beiden Dateien externalLink1.xml.rels und externalLink2.xml.rels. Vermutlich findet man bei mehr Quellen noch mehr Dateien. In diesen xml-Dateien findet man hinter Target= den Dateinamen zum externen Link. Vermutlich ist es am schnellsten, in einem Makro diese Datei(en) zu extrahieren und zu analysieren.

Dennoch wird das einige Zeit dauern.
Gruß,
Helmut

Win10 - Office365 / MacOS - Office365
Antworten Top
#7
Hallo,

es gäbe die Möglichkeit, das mitzuloggen. Z.B. automatisch bei jedem Öffnen oder Schließen einer Exceldatei per VBA im Hintergrund schauen, ob es eine Verbindung zu einer anderen Datei gibt. Falls eine solche existiert, diese Verbindung in eine Liste/Datenbank oder ähnliches eintragen. Mit der Zeit würde dort dann eben alles protokolliert. Und du könntest dort nachsehen.

Grüße, Ulrich
Antworten Top
#8
Hallöchen,

hier mal eine Variante, um ein Verzeichnis zu prüfen. Die Dateien werden dazu der Reihe nach geöffnet. Damit es etwas weniger Probleme macht wird die Berechnung zuerst auf manuell gestellt und die Aktualisierung der Verknüpfungen beim Öffnen unterdrückt.

Code:
Option Explicit

Sub ListExternal()
'Variablendeklarationen
Dim wshListEx As Worksheet, wshSheet As Worksheet, rngCell As Range
Dim strFileNames As String
Dim varFileArr(), alinks
Dim iFile As Integer, lFCnt As Long

'Suchpfad
Const strDir$ = "C:\Test\"

'Berechnung auf manuell stellen
Dim lAppCalc&
lAppCalc = Application.Calculation
Application.Calculation = xlCalculationManual

'Bildschirmflackern aus
Application.ScreenUpdating = False

'In Pfad wechseln - kann man auch anders loesen
ChDrive Left(strDir, 1)
ChDir strDir

'alte Daten auf dem Uebersichtsblatt loeschen (meine Datei hat nur dieses)
Set wshListEx = ActiveSheet
wshListEx.Cells.ClearContents
'Ueberschrift setzen
Cells(1, 1) = "Verknüpfungen in dieser Arbeitsmappe"

'Alle Exclfiles verarbeiten
strFileNames = Dir("*.xls*")

'Array mit Filenamen erzeugen
Do While strFileNames <> ""
  lFCnt = lFCnt + 1
  ReDim Preserve varFileArr(1 To lFCnt)
  varFileArr(lFCnt) = strFileNames
  strFileNames = Dir()
'Ende Array mit Filenamen erzeugen
Loop

'Schleife ueber alle gefundenen Files
For iFile = 1 To UBound(varFileArr)
  'Fehlermeldungen abschalten
  Application.DisplayAlerts = False
  'Bei Fehler Verarbeitung ueberspringen
  On Error GoTo weiter
  'Datei Readonly und ohne Aktualisierung von Verknuepfungen oeffnen
  With Workbooks.Open(Filename:=varFileArr(iFile), UpdateLinks:=False, ReadOnly:=True)
    'Verknuepfungen abgreifen
    alinks = .LinkSources(xlExcelLinks)
    'Deteiname und ggf. Verknuepfung daneben eintragen
    With wshListEx.Cells(Rows.Count, 1).End(xlUp).Offset(1)
      .Value = varFileArr(iFile)
      If Not IsEmpty(alinks) Then
        .Offset(, 1).Resize(1, UBound(alinks)).Value = alinks
      End If
    'Ende Deteiname und ggf. Verknuepfung daneben eintragen
    End With
    'Datei schliessen
    .Close
'Sprungmarke fuer Fehler
weiter:
  'Ende Datei Readonly und ohne Aktualisierung von Verknuepfungen oeffnen
  End With
'Ende Schleife ueber alle gefundenen Files
Next

'Fehlermeldungen an
Application.DisplayAlerts = True
'Berechnungsmodus auf Ausgangseinstellung setzen
Application.Calculation = lAppCalc

End Sub
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
Antworten Top
#9
Hallo Helmut, Ulrich und André 

Herzlichen Dank für euere Gedanken zu diesem Thema und euere Vorschläge.

Die Sache scheint - wie vermutet - nicht ganz einfach zu sein.  Ich bin daran, diese Lösungsansätze durchzuarbeiten, möchte mich jedoch bereits jetzt für euere Mühe bedanken.

Beste Grüße
Peter
Windows 10 / Office Professional Plus 2016.
Rückmeldungen machen immer Freude.
Antworten Top
#10
Hallöchen,

mal noch zwei Hinweise

1) der Code listet die Dateinamen, auf die Verknüpfungen gehen. Er listet keine Zelladressen, Bereichsnamen, Formeln usw. die die Verknüpfungen verwenden. Wäre eventuell kontraproduktiv und in der weiteren Analyse aufwändiger, wenn Formeln mit Verknüpfungen recht häufig verwendet werden.

2) Du kannst den Code z.B. anhand weniger Dateien testen. Wenn das Ergebnis Deinen Ansprüchen genügt, dann kannst Du ihn auch mal Abends oder über Nacht laufen lassen, wenn es nicht stört Smile Schlimmstenfalls läuft der Rechner in den Ruhezustand, aber da kann man ja mal die Einstellungen ändern Smile
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste