Macro excel recorrer tabla y generar pdf por cada valor

Actualmente estoy intentando hacer de lo cual, sinceramente, no tengo ni idea.
El caso practico que tengo es el siguiente (generar facturas con datos de una tabla).

  1. Necesito configurar una macro que recorra una tabla en la cual hay 5 valores que debe introducir en una tabla situada en otra hoja.
  2. Una vez rellenado esos datos, debe generarse un pdf con esta hoja y el nombre de el valor de la celda A15 por ejemplo... (esto si lo tengo :D )
  3. Una vez generado el pdf, se deben actualizar los datos en la tabla de destino con los datos de la siguiente fila de la tabla origen.
  4. Generar de nuevo otro pdf con los registros actualizados.

Si no se puede automatizar que revise y exporte los 200 registros de la tabla del tirón... Al menos que yo le de a un botón que recargue la macro de actualizar os valores y exportar...

¿Es muy difícil lo que expongo?

Entiendo que la dificultad debe de estar en un for/while que vaya recorriendo la tabla de origen para ir escribiendo los datos en la tabla de destino. Yo al menos, muero ahí...

De repaso...

Office Excel 2013/2016
Hay un libro con dos hojas. En la primera, tabla de origen con filas de las que obtenemos los datos. En la segunda, una factura en la que hay que ir introduciendo los datos para generar pdf.

Cualquier ayuda, es bienvenida.

3

3 respuestas

Respuesta
3

Te anexo la macro para imprimir las facturas

Sub Imprimir_Facturas()
'Por Dante Amor
    'IMPRIMR FACTURAS
    Set h1 = Sheets("datos")      'hoja con datos de una tabla origen
    Set h2 = Sheets("factura")    'hoja con la factura a imprimir
    '
    ruta = ThisWorkbook.Path & "\"
    'PASAR DATOS de hoja1 a hoja2
    For i = 2 To h1.Range("A" & Rows.Count).End(xlUp).Row
        h2.Range("A2").Value = h1.Cells(i, "A").Value   'Dato 1
        h2.Range("B3").Value = h1.Cells(i, "B").Value   'Dato 1
        h2.Range("C4").Value = h1.Cells(i, "C").Value   'Dato 1
        h2.Range("D5").Value = h1.Cells(i, "D").Value   'Dato 1
        h2.Range("E6").Value = h1.Cells(i, "E").Value   'Dato 1
        arch = h2.Range("A15").Value
        h2.ExportAsFixedFormat Type:=xlTypePDF, _
            Filename:=ruta & arch & ".pdf", _
            Quality:=xlQualityStandard, IncludeDocProperties:=True, _
            IgnorePrintAreas:=False, OpenAfterPublish:=False
    Next
    MsgBox "Impresión Terminada", vbInformation, "IMPRIMIR PLANTILLA DE EXCEL"
End Sub

Tienes que hacer varios cambios en la macro:

- En estas líneas tienes que poner los nombres de tus hojas

    Set h1 = Sheets("datos")      'hoja con datos de una tabla origen
    Set h2 = Sheets("factura")    'hoja con la factura a imprimir

- Por ejemplo, en la siguiente línea tienes que en cuál celda de la hoja2 (factura) va el dato1

 H2. Range("A2").Value = h1.Cells(i, "A").Value   'Dato 1

Es decir, cambia "A2" en "h2.Range("A2")" por la celda donde va el primer dato.

También cambia la columna "A" en "h1.Cells(i, "A")" por la columna de la hoja1 (tabla origen) de donde va a tomar el dato1

Repite las indicaciones para los 5 datos.

- Cambia A15 por la celda de donde se va a tomar el nombre del archivo Pdf.

arch = h2. Range("A15").Value

Avísame si necesitas ayuda para hacer las adecuaciones, para ello debes poner 2 imágenes una con la hoja de datos origen y otra con la factura, procura que en la imágenes se vean las filas y las columnas de excel.


Respuesta
2
Respuesta
1

Manuel yo utilizo esta macro para generar el pdf te la comparto:

Public HOJA_ACTUAL As String

Private Sub CMD_ACEPTAR_Click()
Dim nombre_pdf As String
On Error GoTo errores
nombre_pdf = TextBox1
ruta_pdf = "C:\PEDIDOS DEL SISTEMA\" & nombre_pdf & ".pdf"
MsgBox ruta_pdf, , "EL DOCUMENTO SE GUARDARA EN LA SIGUIENTE CARPETA:"

ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
ruta_pdf, Quality:=xlQualityStandard, _
IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:= _
True
errores:
Call msg_error
End Sub

Private Sub CMD_SALIR_Click()
Sheets(HOJA_ACTUAL).Select
Select Case HOJA_ACTUAL
Case "VENTA"
Call LIMPI
Case "COTIZA"
Call LIMPI_COTIZA
End Select

End

End Sub

Private Sub UserForm_Activate()
HOJA_ACTUAL = ActiveSheet.Name

End Sub

Esta la llamo desde un userform para darle el nombre que yo desee pero puedes substituirlo por el valor de la celda ("A15") como es en tu caso, ahora para llamar los datos que tienes en la primer hoja, te convendría (según yo) que estén en una tabla con nombre "tabla_datos" y así puedes de una forma más sencilla usar las funciones de búsqueda (que me imagino son los datos de los productos que vas a facturar) como son buscarv y buscarh, ahora si quieres profundizar más para llevar un control de existencias, te aconsejo que los movimientos los registres en una base de datos de tu preferencia.

Ok!
Me lo anoto como otra forma más.

Gracias!

Claro si te es más fácil manipularla como otra forma más, a mi se me hizo más fácil esta manera.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas