Macro para generar un nuevo libro cuando hayan 7 hojas en el

Estoy realizando un formato para llevar un registro diario, mi meta es usar un solo libro de Excel por semana, por lo que mi intención es:

1. Registrar un día a la vez: cuando se llene el formato, que todos los datos de la hoja se copien en una nueva con la fecha del día como nombre, se limpie el formulario y se quede listo para capturar el día siguiente

2. Cuando ya haya una hoja por día (7 hojas ya que es por semana) me gustaría que se autoguardara como un archivo aparte con el rango de días que abarca en el nombre del archivo, y que el archivo original quedara como el formato original: con el formulario en blanco y con una sola hoja

Tenia pensado usar Sheets. Count con un If, por ejemplo:
numhojas = Sheets.Count

If numhojas => 7

Then ThisWorkBook. SaveCopyAs (nombre)

...

Range("rango de celdas donde para rellenar"). ClearContents

¿Una ayuda?

Respuesta
2

Te recomiendo lo siguiente.

1. Que tengas un libro con una hoja "formato", esta hoja deberá permanecer protegida, es decir, el "formato" no puede ser modificado.

2. En la hoja "formato" tendrás un botón con la macro para copiar el "formato" a una hoja nueva.

3. Si ya creaste la hoja de hoy, la macro te enviará un mensaje de error.

4. Si el día de hoy no existe, entonce la macro creará la hoja nueva con el "formato" y a la hoja le pondrá por nombre el día de hoy.

5. Si ya llegaste a 7 días, significa que tienes 8 hojas, una hoja con el "formato" y 7 hojas con los días de la semana; entonces si hay 8 hojas, la macro moverá 7 hojas a un nuevo libro y le pondrá por nombre, por ejemplo: "06-01-2015 a 12-01-2015"; guardará el nuevo archivo en la misma ruta que tiene la macro.

6. En tu archivo con la macro se creará una nueva hoja, lista para que empieces a capturar. Pero siempre tendrás la hoja "formato".

Es más práctico tener una hoja "formato", que limpiar y copiar una misma hoja, además de que tendrás en una hoja centralizada la macro, ¿de otra forma en cuál hoja tendrías la macro?. De esta forma, todas las hojas siempre empezarán con el mismo "formato".


Te anexo la macro.

Sub Macro1()
'Por.Dante Amor
    ruta = ThisWorkbook.Path & "\"
    Application.ScreenUpdating = False
    For Each h In Sheets
        hoy = Format(Date, "dd-mm-yyyy")
        If h.Name = hoy Then
            existe = True
            Exit For
        End If
    Next
    If existe Then
        MsgBox "Ya está creada la hoja del día de hoy"
        Exit Sub
    End If
    If Sheets.Count = 8 Then
        nombre = Sheets(2).Name & " a " & Sheets(8).Name
        Sheets(Array(2, 3, 4, 5, 6, 7, 8)).Move
        ActiveWorkbook.SaveAs ruta & nombre
        ActiveWorkbook.Close
        MsgBox "Libro de la semana: " & nombre, vbInformation, "GUARDADO"
    End If
    '
    Cells.Copy
    Sheets.Add After:=Sheets(Sheets.Count)
    ActiveSheet.Paste
    ActiveSheet.Name = Format(Date, "dd-mm-yyyy")
    Range("A1").Select
    Application.CutCopyMode = False
End Sub

También te anexo mi archivo de pruebas para que veas el funcionamiento.

https://www.dropbox.com/s/0b19ag75up1bx7t/libro%20semanal.xlsm?dl=0 


Saludos. Dante Amor

No olvides valorar la respuesta.

¡Gracias amigo! Me pareció excelente y mucho más práctico que mi propuesta original, recibe un cordial saludo de mi parte y gracias de nuevo!

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas