Macro para guardar archivo con el valor de varias celdas, una de ellas con fecha Antes de Imprimir una hoja especifica

No soy para nada conocedora de macros, pero he experimentado con varias formas de "guardar como" un archivo (que tiene vinculo a otro libro) y que de una de las hojas se tome el nombre formado por: los valores de dos celdas con letras y la tercera celda es una fecha, la cual necesito que aparezca con el formato fecha no como numero..

Archivo base que esta abierto:
cliente martinez sa.xlsm
En la hoja "factura" tomar de la celda "a1" el nombre (martinez sa) además de la celda "c1" el local (palermo)y por ultimo de la celda "F1" la fecha (15-7-15)
Guardar todo

Archivo guardar como:
Cliente martinez sa palermo 15-7-15.xlsm
Posteriormente romper todos los vínculos que tenga y cerrar

Todavía no sé si es buena idea que se ejecute todo por ejemplo ANTES de imprimir (tampoco me salio una prueba que hice) o directamente desde un botón

Apenas estoy viendo algo como esto:

Sub factura_nueva()
'teniendo el libro abierto
dim nomcliente As String, local As String, fecha As string
nomcliente = Sheets("factura").Range("A1")
local = Sheets("factura").Range("c1")
fecha = Sheets("factura").Range("f1")
Application.DisplayAlerts = False
ActiveWorkbook.SaveAS Filename:= _
"C:\usuarios\usuario\mis documentos\facturacion\" & nomcliente & local & fecha, _
FileFormat:=XlOpenXMLWorkbookMacroEnabled, CreateBackup:=False
Application.DisplayAlerts = True
End Sub

Y me da errores de sintaxis en todos lados!..

Antes de darme por vencida pido socorro!

1 respuesta

Respuesta
1

 H o l a :

No estoy entendiendo bien lo que quieres.

1. ¿Tienes 2 libros? ¿O solamente un libro?

2. Los datos de las celdas A1, ¿C1 y F1 están en el mismo libro o están en otro libro?

3. Sí se puede guardar el archivo antes de imprimir. ¿Así es cómo lo quieres?

Y tengo más dudas, pero no puedo ayudarte con la macro si no me resuelves la duda 1.

Gracias y perdón!..

Tengo un libro base para cada cliente (en este caso el cliente es martínez sa), del cual genero la factura del mes y la guardo (cliente martinez sa palermo 15-7-15.xlsm), sin los vínculos. En el archivo base estará guardado lo mismo hasta el próximo mes que modificare según los datos que reciba (necesito los del mes anterior).

Los datos de las celdas A1, C1 y F1 están en el libro base (en la hoja "factura")

Me encantaría si se puede ejecutar antes de imprimir la hoja "imprimir factura" del libro base

Este archivo resultante de "guardar como" es como una copia de seguridad en valores..

H o l a:

Te anexo la macro por si la quieres poner en un botón:

Private Sub Workbook_BeforePrint(Cancel As Boolean)
'Por.Dante Amor
    Application.ScreenUpdating = False
    Application.DisplayAlerts = False
    Set l1 = ThisWorkbook
    Set h1 = Sheets("factura")
    ruta = l1.Path & "\"
    arch = h1.[A1] & " " & h1.[C1] & " " & Format(h1.[F1], "dd-mm-yyyy") & ".xlsm"
    l1.SaveCopyAs ruta & arch
    Set l2 = Workbooks.Open(ruta & arch)
    For Each h In l2.Sheets
        h.Cells.Copy
        Range("A1").PasteSpecial Paste:=xlPasteValues
    Next
    l2.Close True
End Sub

Si quieres que se guarde antes de imprimir, pon la siguiente macro en los eventos de Thisworkbook:

Private Sub Workbook_BeforePrint(Cancel As Boolean)
'Por.Dante Amor
    Application.ScreenUpdating = False
    Application.DisplayAlerts = False
    Set l1 = ThisWorkbook
    Set h1 = Sheets("factura")
    ruta = l1.Path & "\"
    arch = h1.[A1] & " " & h1.[C1] & " " & Format(h1.[F1], "dd-mm-yyyy") & ".xlsm"
    l1.SaveCopyAs ruta & arch
    Set l2 = Workbooks.Open(ruta & arch)
    For Each h In l2.Sheets
        h.Cells.Copy
        Range("A1").PasteSpecial Paste:=xlPasteValues
    Next
    l2.Close True
End Sub

Instrucciones para poner la macro en los eventos ThisWorkbook

  1. Abre tu libro de excel
  2. Para abrir Vba-macros y poder pegar la macro, Presiona Alt + F11
  3. Del lado izquierdo dice: VBAProject, abajo dale doble click a ThisWorkbook
  4. Del lado derecho copia la macro

genial!, ya mismo pruebo!!!...sí....faltaba decir guardar antes de imprimir!

comento luego!

mil gracias!!!!...

Mil Gracias!,

No estaba entendiendo las últimas filas de la macro....la idea es copiar el libro entero con todas las hojas, por eso se me ocurrió cortar vínculos para que no se modifiquen al modificar el otro libro base vinculado, siiii.. también puede ser pegado especial valores.....

me sale el sig. error:

error 1004 en tiempo de ejecución:

esta operación requiere que las celdas a combinar tengan el mismo tamaño.

sale resaltado en amarillo:
Range("A1").PasteSpecial Paste:=xlPasteValues

Ese error es por que está intentando pegar los datos como valores.

Pero si ya están todas las hojas en el libro, ¿ya no es necesario pegar los valores?

Si ya no es necesario, solamente necesitas esto:

Private Sub Workbook_BeforePrint(Cancel As Boolean)
'Por.Dante Amor
    Application.ScreenUpdating = False
    Application.DisplayAlerts = False
    Set l1 = ThisWorkbook
    Set h1 = Sheets("factura")
    ruta = l1.Path & "\"
    arch = h1.[A1] & " " & h1.[C1] & " " & Format(h1.[F1], "dd-mm-yyyy") & ".xlsm"
    l1.SaveCopyAs ruta & arch
End Sub

S a l u d o s

Sí... debe estar en valores cada hoja del nuevo libro (clon del anterior) o romper vínculos de éste con el único libro vinculado que tiene de un archivo base general.

(Con romper vínculos es suficiente, era mejor pegar valores si es que esto achica el tamaño del archivo, no sabría)

Gracias!

Te anexo la macro para dejar solamente valores en todas las hojas:

Private Sub Workbook_BeforePrint(Cancel As Boolean)
'Por.Dante Amor
    Application.ScreenUpdating = False
    Application.DisplayAlerts = False
    Set l1 = ThisWorkbook
    Set h1 = Sheets("factura")
    ruta = l1.Path & "\"
    arch = h1.[A1] & " " & h1.[C1] & " " & Format(h1.[F1], "dd-mm-yyyy") & ".xlsm"
    l1.SaveCopyAs ruta & arch
    Set l2 = Workbooks.Open(ruta & arch)
    For Each h In l2.Sheets
        For Each c In h.UsedRange
            c.Value = c.Value
        Next
    Next
    l2.Close True
End Sub

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas