¿Como creo una macro que me guarde una copia de un archivo excel, con un nombre especifico y solo ciertas "Sheets?"

Estoy en mi proyecto final para optar por el título de Ingeniero de Sistemas, el punto es que no tengo conocimientos de como programar en Microsoft Excel, entonces necesito de su ayuda, les presento lo siguiente:

Tengo un Libro en Excel ("ReporteFinal") con cuatro hojas "Producción", "Paradas", "PROD", "Arrastre".

En la hoja "Producción" quiero colocar un botón que diga "Enviar" y que al hacer Clic me guarde una copia del libro solo con las hojas "Producción" y "Paradas", a demás quiero que me guarde la copia en la siguiente dirección: "K:\Produccion\Diario\PLANTA I" con el nombre de ReporteProduccionP1-AAAAMMDD, es decir ReporteProducciónP1-(Fecha en la que se hizo la copia)

AAAA = Año

MM = Mes

DD = día

Ejemplo: "ReporteProduccióP1-20140910"

Aparte quería saber si era posible que Al hacer clic para guardar la copia en la dirección anterior expuesta, creara una carpeta por més, es decir, que si estamos en Septiembre, este creara en esa dirección un carpeta llamada "Septiembre" y alli se guardaran todos las copias que se hicieron en el mes de septiembre, igualmente si llega el mes de agosto me cree una carpeta "Agosto" y guarde alli todos las copias del mes.

Disculpen si me extendi demasiado explicando, pero queria ser preciso para ver si me podrían ayudar.

1 respuesta

Respuesta
1

Coloca la siguiente macro en tu libro "Reporte Final"

Sub guardar()
'Por.Dante Amor
    Application.ScreenUpdating = fals
    Application.DisplayAlerts = False
    Set l1 = ThisWorkbook
    ruta = "K:\Produccion\Diario\PLANTA I"
    'ruta = l1.Path
    '
    'Crea nuevo libro y copia hojas
    l1.Sheets("Produccion").Copy
    Set l2 = ActiveWorkbook
    l1.Sheets("Paradas").Copy After:=l2.Sheets(l2.Sheets.Count)
    '
    mes = Month(Date)
    meses = Array("", "Enero", "Febrero", "Marzo", "Abril", "Mayo", "Junio", "Julio", _
                  "Agosto", "Septiembre", "Octubre", "Noviembre", "Diciembre")
    nd = meses(mes)
    '
    If Dir(ruta & "\" & nd, vbDirectory) = "" Then
        MkDir ruta & "\" & nd
    End If
    '
    nom = "ReporteProduccionP1-" & Year(Date) & Format(Month(Date), "00") & Format(Day(Date), "00")
    l2.SaveAs ruta & "\" & nd & "\" & nom
    l2.Close
    MsgBox "Libro copiado", vbInformation
End Sub

La macro hace lo siguiente:

- Crea un nuevo libro

- Copia las hojas "Produccion" y "Paradas" al nuevo libro.

Nota: Revisa como tienes el nombre de la hoja "Produccion", si lo tienes con acento, entonces cambia en la macro en esta línea la palabra "Produccion" por "Producción"

L1. Sheets("Produccion"). Copy

- Busca el directorio del mes actual, si no existe crear el nuevo directorio.

- Guarda el archivo en el directorio correspondiente al mes actual con el nombre indicado.

9. Vuelve a presionar click derecho dentro de la imagen y ahora selecciona: Asignar macro. Selecciona: guardar

10. Aceptar.

11. Para ejecutarla dale click a la imagen.

Saludos. Dante Amor

Recuerda valorar la respuesta

La primer línea de la macro dice:

Application.ScreenUpdating = Fals

Debe decir:

Application.ScreenUpdating = False

¡Wow! Estoy muy agradecido con tu ayuda, efectivamente la macro funcionó a la pérfección, muchisimas gracias mi estimado amigo, ya estaba a punto de rendirme y dejar el guardado en manual, no tengo como agradecertelo!

Disculpa, pero hay un detalle en el código, no de funcionamiento, más bien es por haber explicado mal en un principio, resulta que tengo una celda donde hay una fecha, esa es la fecha que quiero que aparezca en el nombre del archivo.

Precisamente en esta línea de código:

nom = "ReporteProduccionP1-" & Year(Date) & Format(Month(Date), "00") & Format(Day(Date), "00")

en vez de que tome la fecha actual, quiero que me tome la fecha de una celda de la hoja. La celda es la "R1".

Esto debido que a veces se acumula trabajo y toca generar reportes de días anteriores.

De verdad disculpa el inconveniente.

¿No mencionaste de cuál hoja?

Cambia en la macro en esta línea por el nombre de la hoja que tiene la fecha.

Set h1 = l1.Sheets("Produccion")

Si tienes una fecha en R1, entonces sería así.:

Sub guardar()
'Por.Dante Amor
    Application.ScreenUpdating = fals
    Application.DisplayAlerts = False
    Set l1 = ThisWorkbook
    Set h1 = l1.Sheets("Produccion")
    fec = h1.[R1]
    ruta = "K:\Produccion\Diario\PLANTA I"
    'ruta = l1.Path
    '
    'Crea nuevo libro y copia hojas
    l1.Sheets("Produccion").Copy
    Set l2 = ActiveWorkbook
    l1.Sheets("Paradas").Copy After:=l2.Sheets(l2.Sheets.Count)
    '
    mes = Month(Date)
    meses = Array("", "Enero", "Febrero", "Marzo", "Abril", "Mayo", "Junio", "Julio", _
                  "Agosto", "Septiembre", "Octubre", "Noviembre", "Diciembre")
    nd = meses(mes)
    '
    If Dir(ruta & "\" & nd, vbDirectory) = "" Then
        MkDir ruta & "\" & nd
    End If
    '
    nom = "ReporteProduccionP1-" & Year(fec) & Format(Month(fec), "00") & Format(Day(fec), "00")
    l2.SaveAs ruta & "\" & nd & "\" & nom
    l2.Close
    MsgBox "Libro copiado", vbInformation
End Sub

¡Gracias! ¡todo listo, muy agradecido! necesito un cursito de excel jaja

Hola! Me di cuenta que al hacer clic al botón de enviar, el documento cambia los colores... me gustaría que mantuviera el amarillo y no pasara a morado y que también se eliminara el botón de Enviar al hacer la copia, espero no sea mucho problema!

La macro no cambia colores, no sé si tienes algún formato condicional, incluso la versión de excel que utilizas quizás no reconoce el color y lo cambia a un color estándar. Tendrás que revisar eso en tu excel, como te comento la macro no cambia colores copia todo tal cual.

Y para que no copie el botón: selecciona el botón con el botón derecho del mouse hasta que te aparezca la opción: Tamaño y propiedades, elige esa opción y en la pestaña "Propiedades" selecciona la opción: "No mover, ni cambiar tamaño con las celdas" y desmarca "Imprimir objeto"

Uhm sí, me había pasado ese paso en la explicación, veo que la copia contiene las fórmulas dentro las celdas, es decir, si uno hace clic, en la barra fx aparecen las fórmulas y los enlaces a las celdas, ¿eso no se puede quitar? ¿Y qué solo copie el número que se ve? No se si sabes a que me refiero.

amigo, igualmente me sigue dejando en la copia del archivo el botón de enviar. :/

Si tienes, razón el botón se va porque se copia toda la hoja.

Tendrás que poner el botón en otra hoja diferente a las que se envía, tal vez una hoja nueva que solamente tenga ese botón.

Son otras peticiones a la pregunta original. Podrías crear una nueva pregunta y describes lo que te hace falta.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas