¿Cómo se evita la impresión del cuadro de diálogo cuando se utiliza el método PrintOut de Excel?

StackOverflow https://stackoverflow.com/questions/67219

Pregunta

Cuando uso el método PrintOut para imprimir un objeto Hoja de trabajo en una impresora, se muestra el cuadro de diálogo "Imprimir" (que muestra el nombre del archivo, la impresora de destino, las páginas impresas y un botón Cancelar) aunque configuré DisplayAlerts = False.El siguiente código funciona en una macro de Excel, pero sucede lo mismo si uso este código en una aplicación VB o VB.Net (con los cambios de referencia necesarios para usar el objeto de Excel).

Public Sub TestPrint()
Dim vSheet As Worksheet

    Application.ScreenUpdating = False
    Application.DisplayAlerts = False

    Set vSheet = ActiveSheet
    vSheet.PrintOut Preview:=False

    Application.DisplayAlerts = True
    Application.ScreenUpdating = True

End Sub

EDITAR:La respuesta a continuación arroja más luz sobre esto (que puede ser un cuadro de diálogo de Windows y no un cuadro de diálogo de Excel) pero no responde a mi pregunta.¿Alguien sabe cómo evitar que se muestre?

EDITAR:Gracias por tu investigación adicional, Kevin.Parece que esto es lo que necesito.Simplemente no estoy seguro de querer aceptar ciegamente un código API como ese.¿Alguien más tiene algún conocimiento sobre estas llamadas API y que está haciendo lo que pretende el autor?

¿Fue útil?

Solución

Cuando dice el cuadro de diálogo "Imprimir", supongo que se refiere al cuadro de diálogo "Ahora imprimiendo xxx en" en lugar del cuadro de diálogo de impresión estándar (seleccione impresora, número de copias, etc.).Tomando el ejemplo anterior y probándolo, ese es el comportamiento que vi: "Imprimiendo ahora..." se mostró brevemente y luego se cerró automáticamente.

Es posible que lo que intenta controlar no esté vinculado a Excel, sino que sea un comportamiento a nivel de Windows.Si es controlable, necesitará a) desactivarlo, b) realizar la impresión, c) volver a activarlo.Si su código falla, existe el riesgo de que no se vuelva a habilitar para otras aplicaciones.

EDITAR:Pruebe esta solución: ¿Cómo se evita la impresión del cuadro de diálogo cuando se utiliza el método PrintOut de Excel?.Parece describir exactamente lo que buscas.

Otros consejos

Si no desea mostrar el diálogo de impresión, simplemente realice una prueba macro de la siguiente manera;no mostrará ningún diálogo de impresión y detectará la impresora predeterminada e imprimirá inmediatamente.

sub  test()

 activesheet.printout preview:= false

end sub

Ejecute esta macro e imprimirá la hoja actualmente activa sin mostrar el diálogo de impresión.

Las llamadas API en el artículo vinculado por Kevin Haines ocultan el cuadro de diálogo Impresión de esta manera:

  1. Obtenga el control de la ventana de diálogo Impresión.
  2. Envía un mensaje a la ventana para decirle que no vuelva a dibujar.
  3. Invalidar la ventana, lo que fuerza un nuevo dibujo que nunca sucede
  4. Dígale a Windows que vuelva a pintar la ventana, lo que hace que desaparezca.

Esto es demasiado simplificado, por decirlo suavemente.

Las llamadas API son seguras, pero probablemente querrá asegurarse de que la actualización de pantalla para el cuadro de diálogo Impresión esté configurada en Verdadero si su aplicación falla.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top