Cargar vista previa para imprimir de una hoja de excel en un userform:

Necesito saber el código para cargar la vista previa de una impresión en userform. Antes lo hacia con el comando directo, pero me queda habilitada la barra de impresión, lo cual posibilita que se imprima sin seguir los pasor posteriores, anulando el registro de la trasaccion. Por lo tanto no me deja constancia del evento en mi planilla.

1 Respuesta

Respuesta
2

Te anexo una opción para controlar la impresión.

Con lo siguiente, primero tienes que presionar el botón "Vista previa", después el botón "Procesar" y por último el botón "Imprimir", si no realizas esta secuencia no se permite la impresión.


En los eventos de ThisWorbook tienes que poner la siguiente macro

Private Sub Workbook_BeforePrint(Cancel As Boolean)
'Por.Dante Amor
    Cancel = True
    Select Case Sheets("tmp").[A1]
        Case ""
            MsgBox "No se permite la impresión", vbExclamation, "IMPRESIÓN"
        Case 1
            Sheets("tmp").[A1] = ""
            Cancel = False
        Case 2
            Cancel = False
    End Select
End Sub

Instrucciones para poner la macro en los eventos ThisWorkbook

  1. Abre tu libro de excel
  2. Para abrir Vba-macros y poder pegar la macro, Presiona Alt + F11
  3. Del lado izquierdo dice: VBAProject, abajo dale doble click a ThisWorkbook
  4. Del lado derecho copia la macro

Lo siguiente lo tienes que poner en tu formulario

Private Sub CommandButton1_Click()
'Por.Dante Amor
'Vista previa
    Sheets("tmp").[A1] = 1
    UserForm1.Hide
    Sheets("Hoja1").PrintPreview
    Sheets("tmp").[A1] = 1
    UserForm1.Show
End Sub
Private Sub CommandButton2_Click()
'Por.Dante Amor
'Procesar
    If Sheets("tmp").[A1] = "" Then
        MsgBox "No se ha realizado la vista previa", vbExclamation, "IMPRESIÓN"
    Else
        Sheets("tmp").[A1] = 2
        MsgBox "Procesado", vbInformation, "IMPRESIÓN"
    End If
End Sub
Private Sub CommandButton3_Click()
'Por.Dante Amor
'Imprimir
    If Sheets("tmp").[A1] = 2 Then
        Sheets("Hoja1").PrintOut Copies:=1, Collate:=True
        Sheets("tmp").[A1] = ""
        MsgBox "Impresión enviada", vbInformation, "IMPRESIÓN"
    Else
        MsgBox "No se ha procesado", vbCritical, "IMPRESIÓN"
    End If
End Sub
Private Sub UserForm_Initialize()
'Al iniciar
    Sheets("tmp").[A1] = ""
End Sub

Para que puedas tener la vista previa desde el formulario tienes que poner la propiedad ShowModal del formulario en False


No podrás imprimir desde la vista previa, no podrás imprimir desde el menú de excel, no podrás imprimir con ningún comando directo, solamente podrás imprimir desde el formulario.

Para poder controlar la impresión desde el formulario, con esta opción, tienes que crear una hoja temporal llamada "tmp".

Te anexo mi archivo, la hoja "tmp" está oculta, la hoja que se imprime es la "Hoja1", prueba el funcionamiento del formulario y después adapta las instrucciones a tu formulario.


https://www.dropbox.com/s/cvm5gyyrmm9s5c8/vista%20previa%20desde%20userform.xlsm?dl=0 


Saludos. Dante Amor

Recuerda valorar la respuesta.

Muy interesante tu desarrollo, el tema es que la instrucción de imprimir esta dentro de una rutina, mi intención es que con solo la tecla de escape, el proceso continué. Este es el procedimiento

Sheets("IMPRIME").Visible = True
Sheets("IMPRIME").Select
ActiveWindow.SelectedSheets.PrintPreview

(esta es la parte que quiero omitir)

Sheets("EMITE").Select
Range("C5").Select
MsgBox ("COLOQUE HOJAS NUMERADAS CORRELATIVAS PARA LA SIGUIENTE EMISION... RECUERDE QUE NO ESTA HABILITADA LA REIMPRESION")
If MsgBox("LOS DATOS ESTAN CORRECTOS??", vbYesNo) = vbNo Then
CLEARSCREEN
Else
directom
REGISTRO

Gracias

¿Y ese código está dentro de un userform?

No... dentro de un botón de comando

Tu pregunta original dice esto:

"Cargar vista previa para imprimir de una hoja de excel en un userform"

¿Entonces ya no entiendo para qué el userform?

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas