Hola Experto: Estoy elaborando una macro para abrir un archiov que grabo por fechas (Lote 0301211 08:15.xls) y así cada vez que necesito generar un archivo por lo que en ocasiones tengo varios archivos el mismo día o solamente uno al día, lo que quiero hacer es que la macro busque el archivo más reciente y lo abra. Espero habber explicado el caso correctamente. Espero su respuesta
Gracias Luis Lauro
1 Respuesta
Respuesta de edwinhenao
1
1
edwinhenao, Preguntas de Excel en general y macros VBA básicas
No entiendo el formato de fecha que se está utilizando y los dos puntos de la hora no se podrían usar en un nombre de archivo válido para windows.
Bueno dejame ver si puedo explicarme mejor el nombre del archivo es de esta manera Lote 03032011 0815.xls Donde 03 es el mes 03 el día 2011 el año y las 0815 que dice que el archivo fue grabada en marzo 1 del 2011 a las 815 horas. Este archivo se graba varias veces al día, por lo que quisiera ver la posibilidad que mediante una macro se abra el achivo más próximo, por ejemplo si tuviera los siguientes archivos Lote 03012011 0815.xls ( Lote 03(Marzo) 01 (día 1) 2011 a las 8:15 horas) Lote 03022011 0910.xls ( Lote 03(Marzo) 02 (día 2) 2011 a las 9:10 horas) Lote 03022011 0218.xls ( Lote 03(Marzo) 02 (día 2) 2011 a las 02:18 horas) Por lo que si yo aplicar la macro esta debería de abrir el archivo con el nombre Lote 03022011 0218.xls el cual seria el más reciente de los tres. Espero que me allá podido explicar mejor. Agradezco ty ayuda. Luis Lauro
Se me ocurre obtener los nombres de los archivos y extraer la fecha de ellos y luego utilizar algunas de las herramientas de Excel, como ordenar... La macro debe estar en un libro en el mismo directorio donde están los archivos en cuestión o debe modificarse para tomar los archivos de otro directorio... Y lo que hace es tomar los nombres de los archivos y llevarlos a una hoja nueva desde la celda A1, luego extrae la fecha de cada nombre y las lleva a la columna B, luego ordena las fechas y abre el nombre de archivo que queda en A1, la más reciente... Esta buena la Macro... Éxitos, un saludo y no olvides calificar... ... Sub AbrirArchivoReciente() Dim LaFecha As Date On Error Resume Next Sheets.Add After:=Sheets(Sheets.Count) LaHoja = ActiveSheet.Name ElLibro = ActiveWorkbook.Name Set fs = CreateObject("Scripting.FileSystemObject") ruta = ActiveWorkbook.Path Set directorio = fs.GetFolder(ruta) Set ficheros = directorio.Files Range("A1").Select For Each archivo In ficheros If archivo.Name <> ActiveWorkbook.Name And archivo.Name <> "~$" & ActiveWorkbook.Name Then ActiveCell = archivo.Name ActiveCell.Offset(1, 0).Select End If Next Set fs = Nothing Set directorio = Nothing Set ficheros = Nothing Range("A1").Select While ActiveCell.Value <> "" Mes = Mid(ActiveCell.Value, 6, 2) Dia = Mid(ActiveCell.Value, 8, 2) Año = Mid(ActiveCell.Value, 10, 4) Hora = Mid(ActiveCell.Value, 15, 2) Minuto = Mid(ActiveCell.Value, 17, 2) LaFecha = Mes & "-" & Dia & "-" & Año & " " & Hora & ":" & Minuto ActiveCell.Offset(0, 1).Value = LaFecha ActiveCell.Offset(1, 0).Select Wend Columns("A:B").AutoFit Range("A1").Select ActiveWorkbook.Worksheets(LaHoja).Sort.SortFields.Clear ActiveWorkbook.Worksheets(LaHoja).Sort.SortFields.Add Key:=Range("B:B"), _ SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal With ActiveWorkbook.Worksheets(LaHoja).Sort .SetRange Range("A:B") .Header = xlGuess .MatchCase = False .Orientation = xlTopToBottom .SortMethod = xlPinYin .Apply End With Workbooks.Open Filename:=Range("A1").Value Windows(ElLibro).Activate Application.DisplayAlerts = False Sheets(LaHoja).Delete Application.DisplayAlerts = True End Sub