Impresión de formularios VBA en EXCEL

Al imprimir el formulario sale una gran cantidad de hoja en blanco bajo el userform. ¿Cómo hago para que el userform salga centrado en la hoja?

Respuesta
1

[Hola

¿Cómo intentas imprimir el Userform? ¿Mediante "Printform? De ser ese el caso, no podrás cambiar el formarto con el método "PrintForm" pues no tiene propiedades, para lograrlo una forma sería recurrir a las funciones de la API de Windows, realizando una captura de pantalla del "UserForm", la pegamos en una hoja de Excel y ya ahí puedes cambiar el formato o el tamaño de la captura de pantalla. Desde, por ejemplo, un botón 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
End Sub

Prueba y comentas.

Abraham Valencia

¡Gracias! Aunque eso le supone más trabajo al usuario de mi proyecto.

Lo probé y muestra de entrada error, dice que debo ajustar según sistema operativo 64 bits.

[Hola

Está hecho para 32 y 64 bits, si te da un error debe ser por:

- Modificaste el código

- No pegaste la declaración de variables en la parte superior del módulo del Userform

- Intentaste correr el código desde "algún lado" distinto a un objeto del Userform

La forma correcta es:

- Declarar las variables en la parte superior del módulo del Userform, no debe haber nada encima de ellas:

- Intenta con el código enviado tal cual, incluso usa un botón tal cual el ejemplo_

Prueba tal cual y verás que no hay error alguno.

Abraham Valencia

Acabo de correr el código,

1. No pega la imagen, al depurar sale el paso Activesheet. Paste en amarillo.

2. En la nueva hoja hago el paste con el ratón y pega parte del formulario. ¿Cómo puedo hacer para crear la imagen de todo el formulario y no solo lo que aparece en pantalla?

Mi formulario tiene 110 textbox. Gracias por tu ayuda.

Mejor dicho, en otras palabras, no quiero imprimir un pantallazo, necesito imprimir el formulario.

gracias por tu ayuda

Solo para que quede claro, solo hay dos formas de imprimir un Userform de VBA:

1- Usando el método Printform de VBA que, como ya se comentó, tiene limitaciones pues al no tener propiedades no se puede configurar la forma en que se lanza la impresión. Es más, solo actúa con la impresora predeterminada del sistema operativo; así uno cambie la impresora en el Excel, lo hará con la predeterminada.

2- Haciendo captura de pantalla del Userform, pegando a una hoja y ya en la hoja es fácil configurar como uno desee.

En tu caso da un error (ahora) que probablemente se deba a que tienes el libro protegido o algo (yo no puedo saberlo desde este lado de la pantalla), por ende, para que entiendas como funciona lo ideal era que lo pruebes en un Userform nuevo en un archivo nuevo pero esa es tu decisión. Claro, la cosa sí que se complica si usas un Userform cuyo tamaño va más allá del tamaño del monitor. No hay forma de hacer captura de pantalla de eso.

Por cierto, saliéndome del tema de impresión, el idóneo en esos casos es colocar los Textbox en Multipage o en TabStrip, no directo en el Userform, de ese modo se evitar Userform muy anchos o altos.

Otra cosa ¿no es más práctico enviar todos esos valores a una hoja e imprimir dicha hoja?

Si deseas sigue buscando pero no hay otra forma además de las mencionadas y la cosa se complica con el tamaño. Lamentablemente.

Abraham Valencia

1 respuesta más de otro experto

Respuesta
1

Entiendo que lo quieras hacer bajo el useform, pero para este tipo de casos podrías simplemente ajustarlo por el modulo de Vista del programa (al no ser que sea un volumen absurdamente alto que lo requieras hacer automáticamente)

¡Gracias! 

con vista del programa no cambia mucho... :(

Mi experiencia y conocimientos son muy puntales en excel, estoy por empezar a hacer una serie de cursos en VBA, tal vez después te pueda ayudar compañero.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas