Wie öffne ich mittels VBA das aktuellste Dokument in einem Ordner?
Hallo, ich habe einen Button in Excel, über welchen die aktuellste Version eines Dokuments in einem Ordner geöffnet werden soll. Der Pfad zum Ordner ist z.B. C:\Hallo\ und die Dokument-Namen habe immer folgenden Aufbau: beispiel-JJJJ_MM_DD.xlsx. In dem Ordner befindet sich auch nichts anderes außer den Dokumenten mit diesem Aufbau. Kann mir hier jemand helfen?
2 Antworten
Ich war wohl etwas langsamer als hannes und habe mir seinen Code auch nicht weiter angesehen, möchte meine Lösung aber trotzdem los werden:
Sub AktuellesDokument()
Dim varDirectory As Variant
Dim flag As Boolean
Dim i As Integer
Dim strDirectory As String
Dim thisFile As String
Dim currentFile As String
currentFile = 0
Dim currentFileAll As String
strDirectory = "C:\Hallo\"
i = 1
flag = True
varDirectory = Dir(strDirectory, vbDirectory)
While flag = True
If varDirectory = "" Then
flag = False
Else
If i > 2 Then
thisFile = Right(varDirectory, 15)
thisFile = Replace(thisFile, ".xlsx", "")
thisFile = Replace(thisFile, "_", "") * 1
If thisFile > currentFile Then
currentFile = thisFile
currentFileAll = varDirectory
End If
End If
varDirectory = Dir
i = i + 1
End If
Wend
Workbooks.Open strDirectory & currentFileAll
End Sub
Ich muss allerdings eingestehen, dass ich mir hier Hilfe geholt habe:
http://software-solutions-online.com/2014/03/05/list-files-and-folders-in-a-directory/
Das "Jonglieren" mit Dateien ist nicht so ganz mein "Ding".
Klappt es?
So geht das:
Sub neuestes_File_öffnen()
On Error Resume Next 'Fehler überspringen
Dim Pfad As String, Dateiname As String, Neueste_Datei As String
Dim Datei_Index As Variant, Test_offen As Variant
Dim Datum As Date, Aktuellstes As Date
Pfad = "C:\Hallo\" 'hier legst du deinen Pfad fest
Set Objekt = CreateObject("Scripting.FileSystemObject")
Set Lesen = Objekt.GetFolder(Pfad)
Set Ordner = Lesen.Files
For Each Datei_Index In Ordner
Dateiname = Datei_Index.Name
Datum = 0 'Datum in jeder Schleife auf 0 zurücksetzen
Datum = Replace(Left(Right(Dateiname, 15), 10), "_", ".") 'schneidet 10 Zeichen heraus ab dem 15. Zeichen von hinten und ersetzt Unterstrich mit Punkt
'alternativ kannst du auch das echte Speicherdatum (sekundengenau) auslesen, dann ist es auch egal, wie die Datei heißt.
'aktiviere dazu einfach die nächste Codezeile:
'Datum = Datei_Index.DateCreated
If Datum > Aktuellstes Then Aktuellstes = Datum: Neueste_Datei = Dateiname
Next
'hier noch ein Test, ob die neueste Datei nicht bereits offen ist:
Test_offen = 0: Test_offen = Workbooks(Neueste_Datei).Sheets.Count
If Test_offen = 0 Then Workbooks.Open Filename:=Pfad & Neueste_Datei Else MsgBox ("Die neueste Datei " & Neueste_Datei & " ist bereits geöffnet.")
End Sub
Passt, danke!!!