Hacer referencia a una ruta desconocida excel vba

Tengo un ruta que hace referencia ha un archivo que se crea diario de otro sistema para exportar datos a excel.

ruta = "E:\Dropbox\Cuotas Vencidas 2019-01-06.xls"

El problema es que si se crean dos o mas archivo en un dia se crean asi:

Primer archivo:                 "Cuotas Vencidas 2019-01-06.xls"

Segundo archivo: "Cuotas Vencidas 2019-01-06_94428. M.. Xls"

Tercer archivo archivo: "Cuotas Vencidas 2019-01-06_94506. M.. Xls"

Quiero que la ruta haga referencia al ultimo arichivo creado, pero no se el nombre exactamente porque el sistema le pone al final la hora exacta que fue creado.

¿Cómo puedo hacer referencia en vba a este ultimo archivo creado?

Respuesta
2

[Hola

¿Se mantienen todos los archivos o se van borrando y queda uno solo? Si se quedan todos, en la carpeta respectiva ¿hay archivos más "antiguos" (así sea en minutos u horas) que el archivo que necesitas?

Abraham Valencia

Si, se mantiene todos los archivos en la capeta,

Y si hay archivos más antiguos por hora y por día, porque se van acumulando todos los archivos del mes por lo menos uno diario y hay días que son muchos, pero se diferencian por horas y minutos.

Emmanuel Gonzalez

Perdón, quise decir más "nuevos", o sea ¿alguno creado después de tu último archivo de excel? ¿O es el último de toda la carpeta?

Abraham Valencia

Más nuevo no hay, es decir el que yo quiero usar es el más nuevo, que fue el ultimo que se creo, ejemplo:

Primer archivo:                 "Cuotas Vencidas 2019-01-06.xls"

Segundo archivo: "Cuotas Vencidas 2019-01-06_94428. M.. Xls"

Tercer archivo archivo: "Cuotas Vencidas 2019-01-06_94506. M.. Xls"

En este caso quisiera usar el tercer archivo, que es el más nuevo porque aunque todos se crearon el día de hoy, el más nuevo es el tercero que se creo a las 09:45:06

Disculpa Abraham, ahora veo bien y si pude que allá archivo más recientes me explico, hay diferentes archivos que se generan en la carpeta por ejemplo

Informes Cuotas Vencidas 2019-01-02

Informe de Cobros EMMANUEL GONZALEZ-2019-01-02

Informe de Cobros Anticipado EMMANUEL GONZALEZ -2019-01-02

Y de cada uno puede que allá varios archivos pero lo diferencia poniendo al final las horas y minutos

[Hola nuevamente

De ser así me parece que algo como esto te sería útil:

Sub Ultimoarchivo()
Dim MiPc, Carpeta, Archivos, Archivo, ÚltimoModificado As Date
Application.ScreenUpdating = False
ActiveSheet.Cells.Clear
Set MiPc = CreateObject("Scripting.FileSystemObject")
Set Carpeta = MiPc.GetFolder(ThisWorkbook.Path)
Set Archivos = Carpeta.Files
For Each Archivo In Archivos
   If Not Archivo.Name = ThisWorkbook.Name Then
      If InStrRev(Archivo.Name, ".") > 0 Then
         If Mid(Archivo.Name, InStrRev(Archivo.Name, ".")) = ".xls" Then
            If Archivo.DateLastModified > ÚltimoModificado Then
               Fichero = Archivo.Name
               ÚltimoModificado = Archivo.DateLastModified
            End If
         End If
      End If
   End If
Next
MsgBox Fichero & " " & ÚltimoModificado
End Sub

El autor es un amigo de España (Antonio) y captura el nombre del último archivo modificado en la variable "Fichero", cuestión de que uses el valor de la variable en tu variable "Ruta" de este modo:

ruta = "E:\Dropbox\" & Fichero

Ah, claro, previamente en esta línea:

Set Carpeta = MiPc.GetFolder(ThisWorkbook.Path)

Cambia el "ThisWorkBook.Path" por la ruta de los archivos, que parece ser:

Set Carpeta = MiPc.GetFolder("E:\DropBox")

Comentas

Abraham Valencia

Disculpa, no se si leyó el ultimo mensaje, la verdad no he probado ya estoy acostado, voy a revisar mañana, pero para aclararle que puede ser que el archivo que busco no sea el ultimo modificado de la carpeta.

Por ejemplo:

Informes Cuotas Vencidas 2019-01-02

Informes Cuotas Vencidas 2019-01-02_94418. M.. Xls

Informe de Cobros EMMANUEL GONZALEZ-2019-01-02_94959. M.. Xls

Informe de Cobros Anticipado EMMANUEL GONZALEZ -2019-01-02_95506. M.. Xls

En este caso yo necesitaría la ruta del arichivo ultimo que comienza con "Informe Cuotas Vencidas" que en este ejemplo es "Informes Cuotas Vencidas 2019-01-02_94418. M.. Xls", ya que se modifico a las 09:44:18, pero no necesariamente sea el ultimo modificado de la carpeta, porque en este ejemplo el ultimo modificado en la carpeta es "Informe de Cobros Anticipado EMMANUEL GONZALEZ -2019-01-02_95506. M.. Xls" ya que se modifico a las 09:55:06
Gracias de antemano por su ayuda cordial

Dejé la web abierta mientras avanzaba otras cosas, no vi tu corrección sobre que sí pueden haber archivos más nuevos. En todo caso, la parte que sí o sí es igual siempre es:

"Informes Cuotas Vencidas"

¿Cierto?

Ojo, como te vas dando cuenta, no es tan simple y con eso de que hay más archivos, la cosa se irá complicando más je je je.

Abraham Valencia

Exacto lo que nunca varia es:

"Informes Cuotas Vencidas"

entonces seria el ultimo modificado que comienza con "Informes Cuotas Vencidas"

Cambia esta línea:

If Mid(Archivo.Name, InStrRev(Archivo.Name, ".")) = ".xlsx" Then

Por esta:

If Left(Archivo.Name, 24) = "Informes Cuotas Vencidas" Then

Abraham Valencia

Mi hermano, modifique la macro, porque busco muchos más archivos y en más ubicaciones, con esto me voy a ahorrar muchas muchas horas de trabajo.
Muchas muchas ¡Gracias!

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas