Saltar al contenido

Macro para guardar rango de celdas en PDF


Recommended Posts

Buenas.

Quisiera hacer una macro para guardar un rango de celdas en un PDF cuando se cliquee en un botón. 

La macro en sí, se hacerla. El problema viene en que el rango de celdas seleccionado es grande (no mucho), pero lo suficiente como para que cuando se genere el PDF se guarde en varias hojas. Por tanto, lo que me gustaría que me ayudasen a conseguir es a que la información del rango de celdas se redimensione para que quepa en una única hoja del PDF. ¿Es posible?

Gracias.

Enlace a comentario
Compartir con otras webs

Hace 7 horas, JSDJSD dijo:

Sube tu archivo y probamos

Aquí adjunto un excel de prueba. 

Lo que me gustaría es guardar las tablas (en la prueba están vacías) en una única hoja horizontal en PDF. 

La opción de imprimir que comenta Exceler C no me sirve, ya que tengo que tener una impresora activa todo el rato y no puedo cambiarla por la de Microsoft Print To PDF.

Gracias.

Prueba.xlsm

Enlace a comentario
Compartir con otras webs

Prueba esto:

 

Sub guarda_pdf()

    ruta = ActiveWorkbook.Path & "\salida3.pdf"
    ActiveSheet.PageSetup.PrintArea = "$A$2:$P$42"
    Application.PrintCommunication = False
    With ActiveSheet.PageSetup
        .LeftHeader = ""
        .CenterHeader = ""
        .RightHeader = ""
        .LeftFooter = ""
        .CenterFooter = ""
        .RightFooter = ""
        .LeftMargin = Application.InchesToPoints(0)
        .RightMargin = Application.InchesToPoints(0)
        .TopMargin = Application.InchesToPoints(0)
        .BottomMargin = Application.InchesToPoints(0)
        .HeaderMargin = Application.InchesToPoints(0)
        .FooterMargin = Application.InchesToPoints(0)
        .PrintHeadings = False
        .PrintGridlines = False
        .PrintComments = xlPrintNoComments
        .CenterHorizontally = True
        .CenterVertically = True
        .Orientation = xlLandscape
        .Draft = False
        .PaperSize = xlPaperLetter
        .FirstPageNumber = xlAutomatic
        .Order = xlDownThenOver
        .BlackAndWhite = False
        .Zoom = False
        .FitToPagesWide = 1
        .FitToPagesTall = 1
        .PrintErrors = xlPrintErrorsDisplayed
        .OddAndEvenPagesHeaderFooter = False
        .DifferentFirstPageHeaderFooter = False
        .ScaleWithDocHeaderFooter = True
        .AlignMarginsHeaderFooter = True
        .EvenPage.LeftHeader.Text = ""
        .EvenPage.CenterHeader.Text = ""
        .EvenPage.RightHeader.Text = ""
        .EvenPage.LeftFooter.Text = ""
        .EvenPage.CenterFooter.Text = ""
        .EvenPage.RightFooter.Text = ""
        .FirstPage.LeftHeader.Text = ""
        .FirstPage.CenterHeader.Text = ""
        .FirstPage.RightHeader.Text = ""
        .FirstPage.LeftFooter.Text = ""
        .FirstPage.CenterFooter.Text = ""
        .FirstPage.RightFooter.Text = ""
    End With
    Application.PrintCommunication = True
    
    ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
        ruta, Quality:=xlQualityStandard, _
        IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:= _
        False
End Sub
 

Enlace a comentario
Compartir con otras webs

Muchas gracias a los dos. Ambas respuestas me han servido, pero por sencillez he optado por la de JSDJSD.

No obstante, como comenté anteriormente, tengo que tener siempre activa una impresora (de tickets) entonces si le doy a la macro, al crearse el PDF lo hace en el formato de esa impresora. Por tanto, pensé en el inicio de ejecutar la macro poner: 

Application.ActivePrinter = "Microsoft Print to PDF"

Y una vez finalizada la macro, cambiar a la impresora de Tickets, pero me da error.

¿Hay alguna forma de conseguir esto que comento?

Gracias.

Enlace a comentario
Compartir con otras webs

Archivado

Este tema está ahora archivado y está cerrado a más respuestas.

  • 96 ¿Te parecen útiles los tips de las funciones? (ver tema completo)

    1. 1. ¿Te parecen útiles los tips de las funciones?


      • No
      • Ni me he fijado en ellos

  • Ayúdanos a mejorar la comunidad

    • Donaciones recibidas este mes: 0.00 EUR
      Objetivo: 130.00 EUR
  • Archivos

  • Estadísticas de descargas

    • Archivos
      177
    • Comentarios
      90
    • Revisiones
      27

  • Crear macros Excel

  • Mensajes

    • He cambiado mi macro a este: Sub repetir() Set a = Sheets(ActiveSheet.Name) uf = a.Range("C" & Rows.Count).End(xlUp).Row 'ultima fila con datos ActiveCell.Select ActiveCell.Offset(1, 0).Select   'Application.OnTime Now + TimeValue("00:00:10"), "repetir", , True End If End Sub   Lo que no se es como detenerlo al llegar a la ultima fila con datos de la columna C. Muchas gracias
    • Buenas tardes a todos. Tengo un problema que preciso de vuestra ayuda.  Tengo que controlar los gastos de la oficina que trabajo y he de repartir unos gastos a % según una OT y unos tipos de gastos. Envío un archivo adjunto. Lo que necesito es que lo que aparece en la columna en amarillo lo haga automáticamente, teniendo en cuenta los datos de la tabla a la derecha. Por ejemplo, el primer gasto tiene una cuota de 1477 euros y teniendo en cuenta que es un gasto de tipo Común y que la OT es la 12810234, le corresponde un gasto de 605,57 euros ya que según la tabla de la derecha su % a imputar es de un 41%. ¿alguien me puede ayudar con la formula? He de añadir muchas más líneas y más hojas con el resto de OT y en el futuro cambiar más datos, así que necesito automatizarlo con una formula Excel. Gracias. Control de gastos.xlsx
    • Hola buenas tardes: Por favor me pueden ayudar a realizar lo siguiente. ejecutar una macro después de un tiempo, que recorra una columna a partir de la celda activa hacia abajo. Es una lista extensa, que filtro desde la columna B. y solo me muestra las filas que me interesan. ejemplo: Si mi celda activa es la C23 ejecutar la macro y baje una celda y repite la macro después de 20 segundos y lo vuelve hacer(Simpre bajando una celda), y que este se detenga hasta la ultima fila que este visible en el filtro. Ya que puedo tener muchos datos mas.   Gracias   Prueba filtro y avance.xlsm
    • Muchísimas gracias @Victor7 es realmente increíble. Ahora toca aprender un poco sobre como esta montada esta formula,  pero me ha encantado. Es justo lo que necesitaba. Solo he notado algún fallo cuando los datos no están bien introducidos, por ejemplo hay registro en el punto de control 2 y no en el tres, pero eso en teoría no debería pasar, pero ya sabes como es esto jajaj.  Muchas gracias de verdad. Un saludo
    • Hola, Si lo he entendido bien, te adjunto archivo que creo puede cumplir tus expectativas. En la nueva hoja 'DVU(b)' están los resultados.  Tiene 3 fórmulas: La primera está en A1, que repetirá los títulos de la hoja 'DATAGlobal'.  A medida que se vayan actualizando en esta última hoja, también irán apareciendo automáticamente en la hoja de resultados. Ahora mismo he puesto como rango A1:CB1, pero puede incrementarse de ser necesario. La 2ª fórmula es la de A2:  devuelve las 'Unidades' únicas de la hoja principal.  A este respecto, he colocado como rango de análisis A2:A1900; si prevés que pudiere haber más registros, puedes ampliarlo sin problemas a A2:A19000, o incluso A2:A190000, o más. Y la 3ª fórmula está en B2:  aquí se recogen las cantidades de la columna B que constan en la última aparición de la 'unidad' que se trate, que es la que figura en la celda de la izquierda.  Con la última aparición, me vengo a referir, por ejemplo, que en la fila 4, que recoge la unidad ZCRLA63832, el primer resultado (12,5) lo ha obtenido de B39 y no de A4.  Si no son los mismos, los resultados no serán los esperados.  Y el siguiente resultado (100) es C39.  Esta fórmula también evalúa ahora mismo el rango 2:1900; habrá que ampliarlo dejándolo igual que en la 2ª fórmula, si es el caso. Esta 3ª fórmula, de B2, la puedes copiar horizontalmente hasta donde quieras; siempre devolverá una matriz dinámica con los resultados esperados. Espero haber explicado bien el funcionamiento de la hoja. Saludos, Progreso Unidades (C).xlsx
  • Visualizado recientemente

    • No hay usuarios registrado para ver esta página.
×
×
  • Crear nuevo...

Información importante

Echa un vistazo a nuestra política de cookies para ayudarte a tener una mejor experiencia de navegación. Puedes ajustar aquí la configuración. Pulsa el botón Aceptar, si estás de acuerdo.