La API ReadDirectoryChangesW te puede ayudar en ese caso, ya que te devuelve el nombre de lo que se haya creado, con su ruta completa, en el momento en que el sistema detecte la creación, por lo que te ahorras todas las comprobaciones.
Otra opción que no te había comentado antes es utilizar el objeto FileSystemObject así:
Código:
Set UltimaCarpeta = Nothing
Set UltimoFichero = Nothing
' Busca la carpeta más recientemente creada
Set fs = CreateObject("Scripting.FileSystemObject")
Set f = fs.GetFolder("c:\entrada")
Set sf = f.SubFolders
For Each f1 In sf
If UltimaCarpeta Is Nothing Then
Set UltimaCarpeta = f1
Else
If f1.DateCreated > UltimaCarpeta.DateCreated Then
Set UltimaCarpeta = f1
End If
End If
DoEvents
Next
' Busca el fichero más recientemente creado
Set f = fs.GetFolder(UltimaCarpeta.Path)
Set fc = f.Files
For Each f1 In fc
If UltimoFichero Is Nothing Then
Set Ultimo Fichero = f1
Else
If f1.DateCreated > UltimoFichero.DateCreated Then
Set UltimoFichero = f1
End If
DoEvents
End If
Next
Puedes declarar todas las variables necesarias como Object. Al terminar este código, puedes utilizar las siguientes propiedades de UltimoFichero:
.Attributes (máscara de atributos del fichero)
.DateCreated (fecha de creación)
.DateLastAccessed (fecha de último acceso)
.DateLastModified (fecha de última modificación)
.Drive (letra de la unidad)
.Name (nombre del fichero)
.ParentFolder (objeto Folder en que se encuentra el fichero)
.Path (ruta del fichero, incluye el nombre)
.ShortName (nombre en formato corto)
.ShortPath (ruta completa en formato corto, incluye el nombre del fichero)
.Size (tamaño en bytes)
.Type (descripción asignada a la extensión, si la tiene)
No he probado el código tal cual te lo he escrito aquí, pero no debería darte problemas. Ten en cuenta también que sólo vale para el último fichero; si por cualquier razón necesitases acceder a los dos o tres últimos, o a todos los creados en la carpeta más nueva, tendrías que hacer varias modificaciones.
Ya nos cuentas!