Excel VBA jüngste Datei automatisch auswählen

Hallo,

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?

Danke im Voraus,
Beste Grüße
-prohell

Hallo prohell,

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.

Gruß Hugo

Hallo prohell,

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.

Gruß
Franz

Hallo Franz, genau das versuche ich verzweifelt :smile: 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

Danke im Voraus

Hallo prohell,

ich selbst kann dir da zwar leider nicht helfen, aber vielleicht bringen dich diese Codes weiter:

http://www.office-loesung.de/ftopic182822_0_0_asc.php

Viel Erfolg!

Gruß
Natator

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

Hallo prohell,

leider ist Excel-VBA dazu nicht in der Lage.

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.

Hallo Prohell,

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.

Beste grüße
Armin

Hallo

Schau mal das an

http://www.office-loesung.de/ftopic475579_15_0_asc.p…

Du findest übrigens die meisten Excel vba fragen im Internet etwas suchen…

Da findest auch sehr viel http://xlfaq.herber.de/

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.

viel erfolg

Grüezi prohell

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?

Mit freundlichen Grüssen

Thomas Ramel

  • MVP für MS-Excel -

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?

Gruß Jürgen

Hallo prohell,

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
1 Like

Ich weiß meine Antwort kommt sehr spät, aber vielen Dank für deine Hilfe Franz! Genau das habe ich die ganze Zeit gesucht.
:smile:

Hallo prohell,

besser spät bedanken als nie.
Freut mich, dass mein Lösungsvorschlag in deinen Dateien funktioniert.

Gruß
Franz