Imprimir formulario

Bueno otra vez molestando, pero cada vez me doy cuenta que son más las dudas que me surgen que las respuestas que he logrado solucionar. Te cuento que la pregunta que voy a ser puede considerarse clásica; pero hasta ahora me veo en la necesidad de resolverla. Es la de imprimir un formulario activo; toda esta semana he intentado pero me doy.
El primer intento lo hice con:
Private Sub CommandButton10_Click()
UserForm2.PrintForm 
End Sub
Funciona bien; pero a la hora de imprimir no hay poder humano que permita realizar la impresión de forma vertical y es lo que necesito puesto que el formulario es muy ancho.
Entonces decidí intentar con un código que hay en la red que es el siguiente.
Private Declare Sub ImprPant Lib "User32" Alias "keybd_event" ( _
  ByVal Tecla As Byte, _
  ByVal Monitor As Byte, _
  ByVal Estado As Long, _
  ByVal InfoE As Long)
Private Sub CommandButton10_Click()
 DoEvents
  ImprPant 164, 0, 1, 0
  ImprPant 44, 0, 1, 0
  DoEvents
  Workbooks.Add
  ActiveSheet.PasteSpecial Format:="mapa de bits"
  ActiveWindow.PrintOut
  ActiveWorkbook.Close False 
End Sub
Lo instalo y pongo a correr la macro; creo que crea un segundo libro donde pega la imagen del form y luego creo que debe imprimir como siempre lo hago y estoy seguro que con este código puedo imprimir verticalmente pero... Resulta que cuando está corriendo la macro me aparece error ¨1004; Error en el método printOut de la clase Window. Inmediatamente la aplicación se me bloquea y me toca reiniciar el equipo. Yo se que esta funcionando hasta la mitad pues me queda el segundo libro expuesto pero en la ultima línea no se que ocurre. Te pido este favorcito una ayuda para este inconveniente; es de anotar que no soy experto en el tema lo poco que he aprendido lo logrado aquí. De antemano muchas gracias por cualquier ayuda.

1 Respuesta

Respuesta
1
Me olvidaba proba con esta macro, graba una, y luego reemplázala con esta, supongo que te funcionara, sino enviame el archivo a [email protected].
Sub Numero_1()
'
' Numero_1 Macro
'
    With ActiveSheet.PageSetup
    .PrintArea = ""
    .Orientation = xlPortrait            'xllandscape   (esta es la orientación de la hoja)
    .PaperSize = xlPaperA4             'Tamaño de hoja
    .BlackAndWhite = False             'Incluir colores
    .FitToPagesWide = 1                 'Reduce tamaño de hoja (ancho)
    .FitToPagesTall = 1                    'Reduce tamaño de hoja (alto)
    .CenterHorizontally = False       'Centrar horizontalmente
    .CenterVertically = False            'Centrar verticalmente
    End With
    ActiveWindow.Selection.PrintOut Copies:=1, Collate:=True
    End Sub
Creo que hay problemas pues el botón de imprimir esta dentro del userform que esta activo y he estado leyendo que eso genera un error cuando utilizo ActiveWindow.PrintOut y genera el error 1004.
Mandame el archivo a la dieccion de email que te deje arriba, acordate de avisarme que lo hiciste.
Yo probé este código y el que te deje arriba mediante un userform y me resulto, me imprime de manera vertical. Lo único que cambie en el que te deje antes fue esto
ActiveWindow. Selection. PrintOut por estoActiveWindow. SelectedSheets. PrintOut
Sino proba con el código de abajo
Private Sub CommandButton1_Click()
    With ActiveSheet.PageSetup
        .PrintHeadings = False
        .PrintGridlines = False
        .PrintComments = xlPrintNoComments
        .PrintQuality = 1200
        .CenterHorizontally = False
        .CenterVertically = False
        .Orientation = xlPortrait
        .Draft = False
        .PaperSize = xlPaperA4
        .FirstPageNumber = xlAutomatic
        .Order = xlDownThenOver
        .BlackAndWhite = False
        .Zoom = False
        .FitToPagesWide = 1
        .FitToPagesTall = 1
        .PrintErrors = xlPrintErrorsDisplayed
    End With
    ActiveWindow.SelectedSheets.PrintOut Copies:=1, Preview:=False, Collate:= _
        False
End Sub
Avisame cualquier duda SAludos
Ten encuenta dado_7 que el objetivo es imprimir un userform activo; como te dige en un comienzo el comando ideal es este:
Private Sub CommandButton10_Click()
UserForm2.PrintForm 
End Sub
Pero como el form queda vertical y no se ve todo. Con el código que me das creo que es efectivo si imprimo una hoja de calculo.
Perdon pero no habia entendio que se debia imprimir el useform.
Esto escapa de mis manos, pero anduve investigando en internet y he leído mucho que no se puede imprimir un useform, sin pegarlo en una hoja, así que hay dos posibilidades:
Una seria que utilices esta macro para que efectúe lo mismo que hace impr pant (botón de teclado), esta te pegara la imagen en la celda a1 de la hoja activa y luego usa la que es para imprimir una hoja
Private Declare Sub keybd_event Lib "user32" (ByVal bVk As Byte, ByVal bScan As Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As Long)
Private Sub CommandButton1_Click()
keybd_event 44, 0, 0&, 0&
Range("a1").Select
ActiveSheet.Paste
End Sub
La segunda seria que el useform pase todo a excel, osea a las celdas y luego imprimes la hoja de excel
Espero haberte ayudado en algo, ya que no pude encontrarle la vuelta al tema
Te agradezco el interés dado_7; pero existe todavía inconveniente al utilizar el código que me envías pues el formulario esta activo cuando se da la orden de imprimir; luego las celdas están bloqueadas y se genera el error 1004.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas