¿Hay manera de imprimir una parte especifica de un formulario?

Tengo un formulario al cual le agregue un botón para que me lo guarde en pdf el problema es que al generar el pdf la resolución es mala y además muestra la barra de tareas de windows.

1 Respuesta

Respuesta
1

[Hola

Los Userform de VBA no tienen la posibilidad de imprimirse solo en parte, necesariamente habría que hacer una captura de pantalla de esa parte en específico, lo que conlleva a usar funciones de la API de Windows y calcular el sector exacto de la pantalla, o sea, una cosa de programación que no es simple.

Quizá el dilema está en la forma en que envías a pdf el USerform, coméntala para ver/saber si se puede mejorar.

Abraham Valencia

PD: En general no se recomienda la impresión de los Userform, sino enviar los datos a una hoja y así imprimirlos

Este es el código utilizo
Private Sub CommandButton1_Click()
Dim h1
Set h1 = Sheets.Add
h1.PageSetup.Orientation = xlLandscape
h1.PageSetup.Zoom = 60
Application.SendKeys "(%{1068})"
DoEvents
h1.Paste
h1.PrintOut Copies:=1, Collate:=True
Application.DisplayAlerts = False
h1.Delete
End Sub

Las capturas de pantalla, se use SendKeys o funciones de la API de Windows, pues siempre dependen de la resolución que use el sistema operativo para hacer eso, es decir, no necesariamente se puede mejor. Igual hay una forma en que quizá te quede mejor. Coloca todo esto en el módulo de tu 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

OJO, nada debe ir encima de la declaración de las variables de la API y, evidentemente, debes cambiar el nombre del botón por uno tuyo.

Comentas

Abraham Valencia

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas