Guardar Formulario de vba como pdf

Quisiera saber si hay algún método para que a la hora de guardar el los datos del formulario también se cree un PDF del Formulario.

2 Respuestas

Respuesta
2

Podríamos decir que existen dos formas de imprimir un "UserForm" de VBA:

1- Usar el método "PrintForm". La desventaja, para algunos, de dicho método es de que actúa sobre la impresora predeterminada del sistema operativo y por tanto o tendrías que tener una que "imprima" en PDF o cambiar, de ser otra, la predeterminada (ojo, no la impresora a usar sino la predeterminada) a una de PDF y quizá volver a colocar la predeterminada que tenías. Ah todo eso tiene que ser a través de algún evento de algún objeto del "UserForm":

Private Sub CommandButton3_Click()
Dim WshNetwork As Object
Dim ImpresoraActiva  As String
Set WshNetwork = CreateObject("WScript.Network")
Let ImpresoraActiva = Left(ActivePrinter, Len(ActivePrinter) - 9)
WshNetwork.SetDefaultPrinter "Adobe PDF"
Me.PrintForm
WshNetwork.SetDefaultPrinter ImpresoraActiva
End Sub

2- La segunda forma sería recurrir a las funciones de la API de Windows, realizamos una captura de pantalla del "UserForm", la pegamos en una hoja de Excel y, con el método de exportar PDF del Excel,  convertimos dicha imagen en PDF. Ah, también tiene que ser en un evento de algún objeto del "USerForm":

#If VBA7 And Win64 Then
    Private Declare PtrSafe Sub keybd_event Lib "user32" (ByVal bVk As Byte, ByVal bScan As Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As Long)
#Else
    Private Declare  Sub keybd_event Lib "user32" (ByVal bVk As Byte, ByVal bScan As Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As Long)
#End If
Const KEYEVENTF_EXTENDEDKEY = &H1
Const KEYEVENTF_KEYUP = &H2
Const VK_SNAPSHOT = &H2C
Const VK_MENU = &H12
Private Sub CommandButton2_Click()
Dim Ruta As String
keybd_event VK_MENU, 0, KEYEVENTF_EXTENDEDKEY, 0
keybd_event VK_SNAPSHOT, 0, KEYEVENTF_EXTENDEDKEY, 0
keybd_event VK_SNAPSHOT, 0, KEYEVENTF_EXTENDEDKEY + KEYEVENTF_KEYUP, 0
keybd_event VK_MENU, 0, KEYEVENTF_EXTENDEDKEY + KEYEVENTF_KEYUP, 0
DoEvents
ThisWorkbook.Worksheets.Add After:=Worksheets(Worksheets.Count)
Range("A1").Select
ActiveSheet.Paste
Let Ruta = ActiveWorkbook.Path & "\" & "UserForm.pdf"
ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:=Ruta, _
    Quality:=xlQualityStandard, IncludeDocProperties:=False, _
    IgnorePrintAreas:=False, OpenAfterPublish:=False
Application.DisplayAlerts = False
Worksheets(Worksheets.Count).Delete
Application.DisplayAlerts = True
End Sub

Espero se entienda

Salu2

Abraham Valencia

¡Gracias! 

Esta más complicado de lo que pensé pero voy a ponerlo en practica! 

Saludos

Pues sí, no es tan fácil, igual cualquier duda estamos por aquí.

Feliz año

Abraham Valencia

Gracias compañero!

Hay alguna forma de colocarle un nombre al pdf con una variable "Codigo"?

Feliz año muchas bendiciones.

Con la opción (1) la impresora PDF siempre pide la ruta y nombre del archivo, para evitar eso debes configurar dicha impresora PDF: En sus "preferencias de impresión" asegúrate que esté desmarcada las opción "Do not send font adobe PDF" (o similar) y fíjate que "Adobe PDF security" esté la opción "None". Marca la ruta donde quieres guardar los archivos en la opción "Adobe pdf Output folder". Ahora dicha impresora PDF guardara los archivos en la ruta que indicaste y con el mismo nombre del archivo de Excel. Hasta donde recuerdo no hay forma de darle otro nombre.

Con la opción (2), esta línea:

Let Ruta = ActiveWorkbook.Path & "\" & "UserForm.pdf"

Cámbiala por:

Let Ruta = ActiveWorkbook.Path & "\" & Codigo & "pdf"

Y antes de ella colocas:

Codigo = "lo_que_tu_quieras"

Abraham

Respuesta
1

Increíble todo eso

JI

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas