Guardar una hoja del libro en una carpeta

Como están estimados expertos.

Favor pudieran orientarme en lo siguiente:

Necesito tener archivos históricos cada vez que genero una orden de compra.

La orden de compra la genero mediante formulario VBA en la hoja "CONSOLIDADO" del libro, esta hoja quiero guardarla en una carpeta que se cree dentro de la carpeta donde está el archivo excel, que se guarde con el nombre de cliente que está en la celda H1 + la fecha que está en la celda H3.

Quiero me pudieran ayudar en crear una macro, que esté en un módulo, y correr esta desde un botón que esté en la hoja "CONSOLIDADO"

Desde ya muy agradecido.

3 Respuestas

Respuesta
3

Insertá un módulo y allí copiá el siguiente código:

Sub CopiaHoja()    'macro extraída del manual 500Macros, cap 18: Trabajando con Libros.
'x Elsamatilde
'copio la hoja activa  (CONSOLIDADO)
ActiveSheet.Copy
'creamos un nuevo objeto Libro
Set wb = ActiveWorkbook
With wb
    'guardamos el libro en la misma carpeta con nombre = H1 & H3
    nombre = [H1] & "_" & Format([H3], "dd-mm-yyyy")
.SaveAs ThisWorkbook.Path & "\" & nombre & ".xlsm", FileFormat:=xlOpenXMLWorkbookMacroEnabled
'cerramos el nuevo libro
    .Close
End With
'se libera el objeto
Set wb = Nothing
End Sub

Fijate que en la cadena para el nombre del libro, le asigné un formato a la fecha para que sea apta como 'nombre de libro'. El guión bajo puede ser reemplazado por espacio si te parece.

Respuesta
2

Puedes utilizar para guardar la hoja "CONSOLIDADO" en una carpeta dentro del directorio del archivo Excel, con el nombre del cliente y la fecha de la orden de compra:

Sub GuardarHojaEnCarpeta()
    Dim rutaCarpeta As String
    Dim nombreCliente As String
    Dim fechaOrden As String
    Dim nombreArchivo As String
    ' Obtener el nombre del cliente y la fecha de la celda H1 y H3 respectivamente
    nombreCliente = Sheets("CONSOLIDADO").Range("H1").Value
    fechaOrden = Format(Sheets("CONSOLIDADO").Range("H3").Value, "dd-mm-yyyy")
    ' Crear el nombre del archivo con el formato "cliente_fecha.xlsx"
    nombreArchivo = nombreCliente & "_" & fechaOrden & ".xlsx"
    ' Obtener la ruta de la carpeta donde se encuentra el archivo Excel actual
    rutaCarpeta = ThisWorkbook.Path & "\OrdenesCompra\"
    ' Verificar si la carpeta de destino existe, si no, se crea
    If Dir(rutaCarpeta, vbDirectory) = "" Then
        MkDir rutaCarpeta
    End If
    ' Guardar la hoja "CONSOLIDADO" en la carpeta de destino con el nombre del archivo
    Sheets("CONSOLIDADO").Copy
    With ActiveWorkbook
        .SaveAs rutaCarpeta & nombreArchivo
        .Close SaveChanges:=False
    End With
End Sub

puedes insertar un botón en la hoja "CONSOLIDADO" y asignarle la macro "GuardarHojaEnCarpeta". Cuando hagas clic en el botón, se ejecutará la macro y se guardará la hoja en la carpeta deseada con el nombre del cliente y la fecha de la orden de compra.

Respuesta
1

Te puede interesar

https://youtu.be/j2sf0_ZCr7Y 

¡Gracias!  Estimado Dante.

Vi el video y todo claro, además incluye como enviar mail, que también realizaré.

Muy agradecido,

Saludos,

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas