Imprimir un formulario a formato PDF

Actualmente uso el comando:

Private Sub Logo_Click()
Reporte. PrintForm
Unload Reporte
End Sub

Lo que quisiera es indicar que lo envié a otro dispositivo y no a la impresora predeterminada, tengo como dispositivo llamado: (Bullzip PDF Printer), de lo contrario tendría que usar el dispositivo (Bullzip PDF Printer) como predeterminado para que sea impreso en PDF

1 respuesta

Respuesta
2

Intenta con lo siguiente:

Private Sub Logo_Click()
'
    ImpresoraActual = Application.ActivePrinter
    'te da escoger impresora
    Application.Dialogs(xlDialogPrinterSetup).Show
    ' aqui siguen tus acciones para una impresion
    'cambia el nº copies:= 1 por la cantidad de copias que quieras
    Reporte.PrintForm
    ' y despues vuelves a establecer la que estaba como activa '
    Application.ActivePrinter = ImpresoraActual
    Unload Reporte
End Sub

lo que hace es mostrarte cuáles impresoras tienes, seleccionas una y se imprime en la que seleccionas. Después se regresa a la impresora que tenías.

el comando: Application.Dialogs(xlDialogPrinterSetup).Show

abre propiedades de impresión y lo cambie por: Application.Dialogs(xlDialogPrint).Show para si poder elegir el dispositivo

es solo que no respeta la impresión del formulario, imprime otra cosa, quizá parte de una hoja

Me permite seleccionar la impresora pero sigue enviándola a la predeterminada

Entonces esta no te funciona:

Application.Dialogs(xlDialogPrinterSetup).Show

A mí sí me funciona.

Entonces tal vez, tengas que guardar el formulario como imagen en una hoja, y esa hoja guardarla como PDF.

Crea una hoja llamada "temp", configura la hoja con la salida que deseas (tamaño)

Utiliza la siguiente macro para enviar el form a la hoja y la hoja a pdf

Private Sub CommandButton1_Click()
'Por.Dante Amor
    Set h1 = Sheets("temp")
    h1.Select
    Range("A1").Select
    h1.Cells.Clear
    h1.DrawingObjects.Delete
    DoEvents
    'h1.PageSetup.Orientation = xlLandscape
    Application.SendKeys "(%{1068})"
    DoEvents
    Application.Wait Now + TimeValue("00:00:02")
    DoEvents
    h1.Paste
    'h1.PrintOut Copies:=1, Collate:=True
    h1.ExportAsFixedFormat Type:=xlTypePDF, _
        Filename:=ThisWorkbook.Path & "\form.pdf", _
        Quality:=xlQualityStandard, IncludeDocProperties:=True, _
        IgnorePrintAreas:=False, OpenAfterPublish:=False
    Application.DisplayAlerts = False
End Sub

'S aludos. Dante Amor. Recuerda valorar la respuesta. G racias

ya realice esta segunda parte pero me hace una impresión completa del formulario, la anterior iba bien solo que le falta direccionar al dispositivo que convierte a PDF llamado: Bullzip PDF Printer

como podría ocultar el margen del formulario para que no salga impreso? y hacer la prueba de como quedaría

¿Tu formulario tiene una imagen?

Entonces pon la imagen en la hoja y envía la hoja como pdf.

Prueba esa opción.

Tiene varias imágenes, texto, etc, ese solo fue un ejemplo simple, en total deberán ser 10 imágenes 

las imágenes van a variar dependiendo de un registro numérico y es por ello que las mostrara en un formulario y por lo tanto ser exportado a pdf

Pon lo siguiente al inicio de todo el código del userform

Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long) As Long
Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Private Declare Function DrawMenuBar Lib "user32" (ByVal hWnd As Long) As Long
'
Private Sub UserForm_Initialize()
    Dim lStyle As Long, hMenu As Long, mhWndForm As Long
    mhWndForm = FindWindow("ThunderDFrame", Me.Caption)
    lStyle = GetWindowLong(mhWndForm, -16)
    lStyle = lStyle And Not &HC00000
    SetWindowLong mhWndForm, -16, lStyle
    DrawMenuBar mhWndForm
    Me.Height = Me.Height - 18
End Sub

Si ya tienes el evento initialize, entonces solamente agrega estas líneas al inicio de tu código:

    Dim lStyle As Long, hMenu As Long, mhWndForm As Long
    mhWndForm = FindWindow("ThunderDFrame", Me.Caption)
    lStyle = GetWindowLong(mhWndForm, -16)
    lStyle = lStyle And Not &HC00000
    SetWindowLong mhWndForm, -16, lStyle
    DrawMenuBar mhWndForm
    Me.Height = Me.Height - 18

sal u dos

creo ya nos perdimos con el tema inicial, te parece si te envió por correo el ejemplo? y ya me indicas de que manera se podría exportar el formulario a PDF

Ya te puse varias alternativas:

1. Cambiar la impresora

2. Enviar el form a una hoja

3. Enviar la imagen a la hoja

Pero después pediste quitar el marco al userform, el código que te envié quita el marco al userform

En ningún momento me he perdido, estoy tratando de ayudar a todo lo que pides.

4. La otra alternativa que te propongo es que reproduzcas todo el contenido del form en una hoja de excel y luego envíes la hoja a Pdf

Como te comenté desde un principio, la primer alternativa me funciona. También me funciona la alternativa 2; y por tu comentario: "ya realice esta segunda parte pero me hace una impresión completa del formulario", eso es lo que pediste, imprimir el formulario en PDF.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas