es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cómo eliminar hojas anteriores a este mes.

Tengo un libro de trabajo con varias hojas (los nombres de las hojas son fechas con el formato DD.MM.YYYY).

Estoy usando la siguiente macro para crear una nueva hoja, eliminar lo que sea que esté en un rango dado y mostrar la fecha actual en una nueva hoja:

ActiveSheet.Copy Before:=Sheets(1)
Range("B5:I" & Range("B4").End(xlDown).Row).Select
Selection.ClearContents
ActiveSheet.Name = Format(Date, "DD.MM.YYYY")

También quiero crear una nueva macro para eliminar las hojas de meses anteriores (todo excepto este mes). He intentado las soluciones proporcionadas en este hilo https://stackoverflow.com/questions/66539745/how-to-delete-sheet-older-than-a-month pero nada está funcionando.

No tengo mucha experiencia con VBA, así que cualquier ayuda es bienvenida. Trabajando en Excel 2019.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para eliminar las hojas de meses anteriores (excepto el mes actual), puedes utilizar la siguiente macro:

    Sub EliminarHojasMesesAnteriores()
        Dim ws As Worksheet
        Dim sheetDate As Date
    
        For Each ws In Worksheets
            If IsDate(ws.Name) Then
                sheetDate = DateValue(ws.Name)
                If Month(sheetDate) < Month(Date) Or Year(sheetDate) < Year(Date) Then
                    Application.DisplayAlerts = False
                    ws.Delete
                    Application.DisplayAlerts = True
                End If
            End If
        Next ws
    End Sub
    

    Esta macro recorre todas las hojas de trabajo en el libro y verifica si su nombre es una fecha válida. En caso afirmativo, utiliza la función DateValue para convertir el nombre en una fecha. Si el mes de la hoja es anterior al mes actual o el año de la hoja es anterior al año actual, la macro elimina la hoja.

    Puedes ejecutar esta macro manualmente según sea necesario o puedes utilizar el método Application.OnTime para ejecutarla automáticamente en un horario regular.

Comments are closed.