6 Stimmen

Wie verhindert man den Druckdialog bei Verwendung der Excel PrintOut-Methode?

Wenn ich die PrintOut-Methode verwende, um ein Worksheet-Objekt auf einem Drucker zu drucken, wird das Dialogfeld "Drucken" (mit Dateiname, Zieldrucker, gedruckten Seiten und einer Schaltfläche "Abbrechen") angezeigt, obwohl ich DisplayAlerts = False eingestellt habe. Der nachstehende Code funktioniert in einem Excel-Makro, aber das Gleiche passiert, wenn ich diesen Code in einer VB- oder VB.Net-Anwendung verwende (mit den für die Verwendung des Excel-Objekts erforderlichen Referenzänderungen).

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: Die Antwort unten bringt mehr Licht ins Dunkel (dass es sich um ein Windows-Dialogfeld und nicht um ein Excel-Dialogfeld handelt), beantwortet aber nicht meine Frage. Weiß jemand, wie man verhindern kann, dass es angezeigt wird?

EDIT: Vielen Dank für Ihre zusätzliche Forschung, Kevin. Es sieht sehr danach aus, dass ich genau das brauche. Ich bin mir nur nicht sicher, ob ich den API-Code blind akzeptieren will. Hat jemand anderes haben alle Kenntnisse über diese API-Aufrufe und dass sie tun, was der Autor behauptet?

2voto

Raghbir Singh Punkte 21

Wenn Sie den Druckdialog nicht anzeigen möchten, erstellen Sie einfach einen Makrotest wie folgt; er wird keinen Druckdialog anzeigen, sondern den Standarddrucker erkennen und sofort drucken.

sub  test()

 activesheet.printout preview:= false

end sub

Führen Sie dieses Makro aus und es druckt das gerade aktive Blatt, ohne den Druckdialog aufzurufen.

1voto

Kevin Haines Punkte 2422

Wenn Sie vom Dialog "Drucken" sprechen, meinen Sie wohl den Dialog "Jetzt wird xxx gedruckt" und nicht den normalen Druckdialog (Drucker auswählen, Anzahl der Kopien usw.). Anhand Ihres obigen Beispiels und beim Ausprobieren habe ich genau dieses Verhalten gesehen: "Jetzt drucken..." wurde kurz angezeigt und dann automatisch geschlossen.

Was Sie zu kontrollieren versuchen, ist möglicherweise nicht an Excel gebunden, sondern ein Verhalten auf Windows-Ebene. Wenn es steuerbar ist, müssen Sie es a) deaktivieren, b) den Druck durchführen und c) wieder aktivieren. Wenn Ihr Code fehlschlägt, besteht das Risiko, dass er für andere Anwendungen nicht wieder aktiviert wird.

EDIT: Versuchen Sie diese Lösung: Wie verhindert man den Druckdialog bei Verwendung der Excel PrintOut-Methode? . Es scheint genau zu beschreiben, was Sie suchen.

0 Stimmen

Ja, Ihre Vermutung ist richtig - tut mir leid, dass ich sie nicht präzisiert habe. Weiß jemand, ob es sich um ein Excel- oder Windows-Verhalten handelt?

1voto

Robert S. Punkte 24889

Die API-Aufrufe in dem von Kevin Haines verlinkten Artikel blenden den Druckdialog folgendermaßen aus:

  1. Ermittelt das Handle des Dialogfensters Drucken.
  2. Senden Sie eine Nachricht an das Fenster, um es anzuweisen, nicht neu zu zeichnen
  3. Ungültigmachen des Fensters, was ein erneutes Zeichnen erzwingt, das nie stattfindet
  4. Sagen Sie Windows, dass es das Fenster neu streichen soll, damit es verschwindet.

Das ist, gelinde gesagt, stark vereinfacht.

Die API-Aufrufe sind sicher, aber Sie sollten sicherstellen, dass die Bildschirmaktualisierung für das Dialogfeld "Drucken" auf "True" gesetzt ist, wenn Ihre Anwendung fehlschlägt.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X