folgendes Problem:
Eine gleichbleibende Exceltabelle greift auf mehrere andere Exceltabllen als Verknüpfungen zu.
Jedoch aktuallisieren sich die „anderen Exceltabellen“ und werden unter einem anderem Namen gespeichert, sodass ich manuel die Verknüpfung ändern muss.
Meine Frage: Kann ich in der VBA einen Code eingeben das er in dem angegebenen PFad im Zielordner die aktuellste Datei auswählt?
ich meine, dass vba da nur eine Datei ansprechen kann wenn der Name gleich bleibt. Sobald eine aktualisierte Datei unter einem anderen Namen gespeichert wird findet VBA diese nicht mehr. bei gleichbleibendem Namen sollte die Auswahl der aktuellsten Version möglich sein.
wenn in der Datei Verknüpfungen auf mehrere verschiedene Dateien enthalten sind, dann muss eine eindeutige Beziehung zwischen altem und neuen Namen hergestellt werden können. z.B. Dateien in unterschiedlichen Verzeichnissen oder ähnliche Dateinamen, die sich nur in einem Zusatz unterscheiden.
Wenn diese Voraussetzung gegeben ist, dann kann man in den Verzeichnissen nach den jüngsten Dateien suchen und die Quellen per Makro wechseln.
Hallo Franz, genau das versuche ich verzweifelt Bis jetzt habe ich es geschafft die jüngste Datei in dem Zielordner aufzurufen und auch zu öffnen (wobei das öffnen nur zum testen war). Aber wie kann ich VBA sagen das er diese Datei als neue verküpfung ändern soll?
Bis jetzt:
Sub JuengsteDatei()
Const strVerz As String = „C:\Users\Hell\Documents\Desktop\Workplace\Private-Unterlagen\Rechnungen\2011\2. Februar“
Const strExt As String = „.xls“
Dim strDatei As String, strScratch As String
strScratch = Dir(strVerz & „*“ & strExt)
strDatei = strScratch
Do While strScratch „“
If FileDateTime(strVerz & strDatei) „“ Then
Workbooks.Open strVerz & strDatei
Else
MsgBox „keine Datei gefunden“
End If
End Sub
Hallo,
dies ist nur auf Umwegen möglich. Man müsste zunächst das Verzeichnis auslesen, alle Dateien ausgeben und diese dann nach dem Speicherdatum sortieren. SO könnte man dann den Namen der aktuellsten Datei ermitteln.
Ich habe für das erstere ein Makro - das könnte ich Dir aml zukommen lassen (Mailadresse?)
Gruß,
Jochen
Werden die Verknüpten Dateien umbenannt, oder unter anderem Namen nach Aktualisierung gespeichert, verliert Excel den Bezug.
Das ist wie ein Katalog mit Inhaltsverzeichnis von 2011. Wenn du den aktuellen Katalog von 2012 auschlägst, hat das Inhaltsverzeichnis von 2011 keine Gültigkeit mehr.
Du kannst aber deine aktualisierten Dateien immer in einem Ordner deiner Wahl abspeichern und auf diesen Ordner eine Verknüpfung legen.
So hast du all deine wichtigen Dateien immer auf einen Blick und das aktuell.
sicher knnman mit VBA einen Ordner nach aktuellen Dateien durchsuchen. Da gibt es viele VB6 Beispiele mit dem File-Systems Objekt.
Man muss also vorher eine Objekt anlegen und kann dann damit auf die Dateien zugreifen.
Etwas suchen Im INet bringt viel.
das wäre meine version einer funktion, welche den dateinamen der aktuellsten datei in einem verzeichnis zurückgibt:
Function aktuellsteDatei(verzeichnis As String) As String
Dim datei As String, datum As Date, idatei As String, idatum As Date
If Right(verzeichnis, 1) „“ Then verzeichnis = verzeichnis & „“
If Dir(verzeichnis, vbDirectory) = vbNullString Then Exit Function
datei = Dir(verzeichnis & „*.xls“)
If datei = vbNullString Then Exit Function
datum = FileDateTime(verzeichnis & datei)
Do
idatei = Dir()
If idatei = vbNullString Then Exit Do
idatum = FileDateTime(verzeichnis & idatei)
If idatum > datum Then
datum = idatum
datei = idatei
End If
Loop
aktuellsteDatei = datei
End Function
jetzt geht es noch darum, diese funktion in die tabelle zu basteln. dazu später mehr.
Eine gleichbleibende Exceltabelle greift auf mehrere andere
Exceltabllen als Verknüpfungen zu.
Jedoch aktuallisieren sich die „anderen Exceltabellen“ und
werden unter einem anderem Namen gespeichert, sodass ich
manuel die Verknüpfung ändern muss.
Das ist ein sehr ungünstiger Aufbau der Datenbasis.
Wäre es nicht möglich die aktuellen Daten immer in einer Mappe zu haben, die ihren Namen nicht wechselt und die älteren Dateien dann umzubenennen?
Meine Frage: Kann ich in der VBA einen Code eingeben das er in
dem angegebenen PFad im Zielordner die aktuellste Datei
auswählt?
Generell ist sowas möglich - woran kann denn erkannt werden, welches die alte und welches die neue Datei ist?
Hallo prohell,
ich verstehe das Problem noch nicht so ganz. Stehen denn die verbundenen Dateien, deren Namen sich ständig ändern, jede in einem anderen Pfad? Und bleibt der Pfad immer derselbe? Dann könnte ich mir eine VBA-Lösung vorstellen. Wenn nicht, woher soll das „Stammprogramm“ wissen, wie die jeweilige Datei jetzt heißt?
hier ein Beispiel code, der alle Excel-Datei-Verknüpfungen der aktiven Arbeitsmappe abarbeitet und dabei nach der jüngsten Arbeitsmappe im jeweiligen Verzeichnis sucht und die Quelle des Links wechselt, wenn die jüngste Datei einen anderen Namen hat.
Gruß
Franz
Sub Verknuepfung\_QuelleWechseln()
Dim wb As Workbook, varVerknuepfung
Dim strVerzeichnisVerkn As String, strDateiVerkn As String
Dim varVerknuepfungNeu
Set wb = ActiveWorkbook
For Each varVerknuepfung In wb.LinkSources(Type:=xlExcelLinks)
strVerzeichnisVerkn = Left(varVerknuepfung, \_
VBA.InStrRev(varVerknuepfung, Application.PathSeparator))
strDateiVerkn = VBA.Mid(varVerknuepfung, Len(strVerzeichnisVerkn) + 1)
varVerknuepfungNeu = JuengsteDatei(strVerz:=strVerzeichnisVerkn, strSuch:="\*.xls\*")
MsgBox "Alt: " & varVerknuepfung & vbLf \_
& "Neu: " & varVerknuepfungNeu, vbOKOnly, "Wechseln Verknüpfung" 'Testzeile
If varVerknuepfungNeu "" And varVerknuepfung varVerknuepfungNeu Then
wb.ChangeLink Name:=varVerknuepfung, NewName:=varVerknuepfungNeu, Type:=xlLinkTypeExcelLinks
End If
Next
End Sub
Function JuengsteDatei(strVerz, strSuch As String) As String
Dim strDatei As String, strScratch As String
strScratch = Dir(strVerz & strSuch)
strDatei = strScratch
Do While strScratch ""
If FileDateTime(strVerz & strDatei) "" Then
JuengsteDatei = strVerz & strDatei
Else
JuengsteDatei = ""
MsgBox "keine Datei gefunden"
End If
End Function