Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1712to1716
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Suche nach jüngster Datei

Suche nach jüngster Datei
26.09.2019 12:18:50
Tina
Hallo ihr lieben,
ich habe ein Makro was nach einer Bestimmten Datei sucht.
Klappt Super!
Da wir mit Projekten Arbeiten, die stätigt vorangetrieben werden hätte ich gerne das Makro erweiter für den Abgleich: Suche die Datei Nimm aber das jüngste Datum.
Geschriebenes Makro:
strProject = "Ansicht - Projektplanzeilen - " & Projekte & FILE_EXTENSION 'Anpassen !!!
Set objFileSystemObject = CreateObject("Scripting.FileSystemObject")
Set objDrives = objFileSystemObject.Drives
For Each objDrive In objDrives
With objDrive
If .IsReady Then
If InStr(.ShareName, DRIVE_NAME) größer 0 Then
blnFoundDrive = True
strPath = String$(MAX_PATH, vbNullChar)
lngReturn = SearchTreeForFile(.DriveLetter & ":\", strProject, strPath)
If lngReturn größerkleiner 0 Then
blnFoundFile = True
strPath = Left$(strPath, InStr(1, strPath, vbNullChar) - 1)
Exit For
End If
End If
End If
End With
Next
If blnFoundDrive Then
If blnFoundFile Then
Set objWorkbook = Workbooks.Open(Filename:=strPath)
ThisWorkbook.Activate
strFile = Right(strPath, Len(strPath) - InStrRev(strPath, "\"))
Danke für eure Mühe vorab.

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Suche nach jüngster Datei
26.09.2019 15:37:49
Nepumuk
Hallo Tina,
befinden sich die Dateien im selben Ordner in dem auch die von dem Makro gefundene Datei liegt? Woran kann die jüngste Datei erkannt werden? (z.B. Datum im Dateinamen?)
Gruß
Nepumuk
AW: Suche nach jüngster Datei
27.09.2019 11:19:29
Tina
Hallo Nepumuk,
die Datei ist im gleichen Verzeichnis im gleichen Unterordner mit gleichen Namen außer die Endung ist dann (1) und fortlaufend Hochgezählt.
AW: Suche nach jüngster Datei
27.09.2019 14:40:16
Nepumuk
Hallo Tina,
kannst du bitte den kompletten Code posten, dann muss ich nicht alle Deklarationen nachbauen.
Gruß
Nepumuk
AW: Suche nach jüngster Datei
01.10.2019 12:36:33
Tina
Hallo Nepumuk,
entschuldige die verspätete Antwort. Privat geht es gerade drunter und drüber.
Unten stehend der Code. Würde eh mal behaupten der ist von dir :)
Option Explicit
Private Declare PtrSafe Function SearchTreeForFile Lib "imagehlp.dll" ( _
ByVal RootPath As String, _
ByVal InputPathName As String, _
ByVal OutputPathBuffer As String) As Long
Private Const MAX_PATH As Long = 260&
Public strFile As String
Public strPath As String
Public Sub Projekt()
Const DRIVE_NAME As String = "\\10.3.1.1\Projekte"
Const FILE_EXTENSION As String = "*.xlsx"
Dim objFileSystemObject As Object, objDrives As Object, objDrive As Object
Dim objWorkbook As Workbook
Dim blnFoundDrive As Boolean, blnFoundFile As Boolean
Dim strPath As String, strProject As String
Dim lngReturn As Long
Dim Projekte As String
Projekte = Worksheets(1).Cells(5, 7)
strProject = "Ansicht - Projektplanzeilen - " & Projekte & FILE_EXTENSION 'Anpassen !!!
Set objFileSystemObject = CreateObject("Scripting.FileSystemObject")
Set objDrives = objFileSystemObject.Drives
For Each objDrive In objDrives
With objDrive
If .IsReady Then
If InStr(.ShareName, DRIVE_NAME) > 0 Then
blnFoundDrive = True
strPath = String$(MAX_PATH, vbNullChar)
lngReturn = SearchTreeForFile(.DriveLetter & ":\", strProject, strPath)
If lngReturn  0 Then
blnFoundFile = True
strPath = Left$(strPath, InStr(1, strPath, vbNullChar) - 1)
Exit For
End If
End If
End If
End With
Next
If blnFoundDrive Then
If blnFoundFile Then
Set objWorkbook = Workbooks.Open(Filename:=strPath)
ThisWorkbook.Activate
strFile = Right(strPath, Len(strPath) - InStrRev(strPath, "\"))
Workbooks(strFile).Close savechanges:=False
Set objWorkbook = Nothing
Else
Call MsgBox("Datei nicht gefunden.", vbCritical, "Fehler")
End If
Else
Call MsgBox("Laufwerk nicht gefunden.", vbCritical, "Fehler")
End If
Set objDrive = Nothing
Set objDrives = Nothing
Set objFileSystemObject = Nothing
End Sub

Anzeige
AW: Suche nach jüngster Datei
01.10.2019 14:02:39
Nepumuk
Hallo Tina,
teste mal:
Option Explicit

Private Declare PtrSafe Function SearchTreeForFile Lib "dbghelp.dll" ( _
    ByVal RootPath As String, _
    ByValputPathName As String, _
    ByValputPathBuffer As String) As Long

Public Sub Test()
    
    Const FILE_EXTENSION As String = ".xlsx"
    Const DRIVE_NAME As String = "\\10.3.1.1\Projekte"
    Const MAX_PATH As Long = 260&
    
    Dim avntTemp As Variant
    Dim strProject As String, Projekte As String, strPath As String
    Dim strFile As String, strFolder As String, strFilename As String
    Dim lngReturn As Long, lngMaxNumber As Long
    Dim blnFoundDrive As Boolean, blnFoundFile As Boolean
    Dim objFileSystemObject As Object, objDrives As Object
    Dim objDrive As Object
    Dim objWorkbook As Workbook
    Dim objCollection As Collection
    
    Projekte = Worksheets(1).Cells(5, 7).Value
    
    strProject = "Ansicht - Projektplanzeilen - " & Projekte & FILE_EXTENSION
    
    Set objFileSystemObject = CreateObject(Class:="Scripting.FileSystemObject")
    Set objDrives = objFileSystemObject.Drives
    
    For Each objDrive In objDrives
        
        With objDrive
            
            If .IsReady Then
                
                If InStr(.ShareName, DRIVE_NAME) > 0 Then
                    
                    blnFoundDrive = True
                    strPath = String$(MAX_PATH, vbNullChar)
                    lngReturn = SearchTreeForFile(.DriveLetter & ":\", strProject, strPath)
                    
                    If lngReturn <> 0 Then
                        
                        blnFoundFile = True
                        strPath = Left$(strPath, InStr(1, strPath, vbNullChar) - 1)
                        Exit For
                        
                    End If
                End If
            End If
        End With
    Next
    
    If blnFoundDrive Then
        If blnFoundFile Then
            
            Set objCollection = New Collection
            
            strFolder = Mid$(strPath, 1, InStrRev(strPath, "\"))
            strFilename = Dir$(strFolder & "Ansicht - Projektplanzeilen - " & Projekte & "*." & FILE_EXTENSION)
            Do Until strFilename = vbNullString
                If InStr(1, strFilename, "(") Then
                    avntTemp = Split(strFilename, "(")
                    avntTemp = Split(avntTemp(1), ")")
                    lngMaxNumber = Application.Max(lngMaxNumber, Clng(avntTemp(0)))
                    Call objCollection.Add(Item:=strFilename, Key:=CStr(avntTemp(0)))
                End If
                strFilename = Dir$
            Loop
            
            If objCollection.Count > 0 Then _
                strPath = strFolder & objCollection.Item(Index:=CStr(lngMaxNumber))
            
            Set objCollection = Nothing
            
            Set objWorkbook = Workbooks.Open(Filename:=strPath)
            
            'warum sofort wieder schließen?
            
            objWorkbook.Close savechanges:=False
            
            Set objWorkbook = Nothing
        Else
            Call MsgBox("Datei nicht gefunden.", vbCritical, "Fehler")
        End If
    Else
        Call MsgBox("Laufwerk nicht gefunden.", vbCritical, "Fehler")
    End If
End Sub

Gruß
Nepumuk
Anzeige
AW: Suche nach jüngster Datei
01.10.2019 16:59:49
Tina
Leider kann ich ihn erst nächste Woche testen.
Aber er sieht genauso gut aus wie der andere :)
Natürlich wird sie nicht gleich wieder geschlossen.
Den Abgleich/ Kopieren der Daten erfolgt vor dem Schließen, aber diesen kann ich erst jetzt einbauen. Muss auch noch absprechen ob alle Daten übernommen werden soll oder nur ein Teil :)
1000 dank dir.
LG
Tina
AW: Suche nach jüngster Datei
26.09.2019 21:01:29
Dieter
Hallo Tina,
ich habe mal ein vorhandenes Programm etwas angepasst:
Option Explicit
Public jüngsteDatei As Object
Public jüngstesDatum As Date
Public ws As Worksheet
Public zeile As Long
Sub Datei_suchen()
Dim col As Range
Dim dauer As Single
Dim drv As Object
Dim fso As Object
Dim letzteZeile As Long
Dim rootFol As Object
Dim strProject As String
dauer = Timer
strProject = "Ansicht - Projektplanzeilen - 2019" & ".xlsx"
Set ws = ThisWorkbook.Worksheets(1)
letzteZeile = ws.UsedRange.SpecialCells(xlCellTypeLastCell).Row
If letzteZeile  jüngstesDatum Then
jüngstesDatum = fil.DateLastModified
Set jüngsteDatei = fil
ws.Cells(zeile, "A") = jüngstesDatum
ws.Cells(zeile, "B") = Datei
ws.Cells(zeile, "C") = fil.Path
zeile = zeile + 1
End If
End If
Next fil
For Each subfol In Verzeichnis.SubFolders
FolderAbarbeiten subfol, Datei
Next subfol
Exit Sub
FehlerBeh:
Exit Sub
End Sub

Wenn du mehrere Platten in Betrieb hast, kann das natürlich dauern.
In der Statuszeile siehst du jeweils das aktuell in Berabeitung befindliche Verzeichnis.
https://www.herber.de/bbs/user/132224.xlsm
Viele Grüße
Dieter
Anzeige
AW: Suche nach jüngster Datei
27.09.2019 11:22:08
Tina
Hallo Dieter,
danke für deine Mühe, aber welches Verzeichnis gerade abgearbeitet wird ist mir völlig egal.
Mir ist wichtig, dass der Start des Projektes nicht berührt wird und wir so sehen können wie das Projekt wächst und welche Fehler auftauchen, damit wir auch lernen können.
Daher ist es mir wichtig, dass die Kollegen auch die neue Datei einfach in Ihren Ordner legen und das Programm im Excel starten.
Somit muss mein Programm wissen was ist die jüngste Datei.

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige