selectedsheets printout print para macro imprimir debug codigo activewindow excel vba excel-vba printing printdialog

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



print preview vba excel (3)

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

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

EDIT: Gracias por tu investigación adicional, Kevin. Se parece mucho a esto es lo que necesito. Simplemente no estoy seguro de querer aceptar ciegamente el código API así. ¿Alguien más tiene algún conocimiento sobre estas llamadas API y que están haciendo lo que el autor pretende?


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

Lo que está tratando de controlar puede no estar vinculado a Excel, sino que debe ser un comportamiento de nivel de Windows. Si es controlable, deberá a) deshabilitarlo, b) realizar su impresión, c) volver a habilitar. 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 evita el diálogo de impresión cuando usa el método Excel PrintOut ? Parece describir exactamente lo que buscas.


Las llamadas a la API en el artículo vinculado por Kevin Haines ocultan el cuadro de diálogo Imprimir de la siguiente manera:

  1. Obtener el control de la ventana de diálogo de Impresión.
  2. Envíe un mensaje a la ventana para indicarle que no vuelva a dibujar
  3. Invalidar la ventana, lo que obliga a un redibujado que nunca sucede
  4. Dígale a Windows que vuelva a pintar la ventana, lo que hace que desaparezca.

Eso es simplificado para decirlo suavemente.

Las llamadas a la API son seguras, pero es probable que desee asegurarse de que la actualización de la pantalla para el cuadro de diálogo Imprimir se establezca en Verdadero si su aplicación falla.


Si no desea mostrar el diálogo de impresión, simplemente haga una macroprueba 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.