2008-09-15 25 views
5

Wenn ich mit der PrintOut-Methode ein Worksheet-Objekt auf einem Drucker drucke, wird der Dialog "Drucken" (Dateiname, Zieldrucker, ausgedruckte Seiten und Abbrechen-Schaltfläche) angezeigt obwohl ich DisplayAlerts = False gesetzt habe. Der folgende Code funktioniert in einem Excel-Makro, aber dasselbe passiert, wenn ich diesen Code in einer VB- oder VB.Net-Anwendung verwende (mit den Referenzänderungen, die für die Verwendung des Excel-Objekts erforderlich sind).Wie verhindern Sie den Druckdialog bei Verwendung der Excel-Methode PrintOut

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 wirft unten, um mehr Licht auf diesem (dass es ein Windows-Dialog sein kann und nicht ein Excel-Dialog), aber nicht meine Frage zu beantworten. Weiß jemand, wie man verhindert, dass es angezeigt wird?

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

Antwort

1

Wenn Sie den "Drucken" -Dialog sagen, nehme ich an, dass Sie den Dialog "Jetzt xxx drucken" anstelle des Standarddruckdialogs (Drucker wählen, Anzahl der Kopien usw.) meinen. Nehmen wir Ihr Beispiel über & probieren Sie es aus, das ist das Verhalten, das ich sah - "Now printing ..." wurde kurz angezeigt & dann automatisch geschlossen.

Was Sie steuern möchten, ist möglicherweise nicht an Excel gebunden, sondern ist ein Verhalten auf Windows-Ebene. Wenn es kontrollierbar ist, müssen Sie a) es deaktivieren, b) Ihren Druck ausführen, c) wieder aktivieren. Wenn Ihr Code fehlschlägt, besteht das Risiko, dass dies für andere Anwendungen nicht erneut aktiviert wird.

EDIT: Versuchen Sie diese Lösung: How do you prevent printing dialog when using Excel PrintOut method. Es scheint genau zu beschreiben, was Sie suchen.

+0

Ja, Ihre Annahmen sind korrekt - Entschuldigung habe ich nicht angegeben. Kann jemand wissen, ob dieses Excel- oder Windows-Verhalten zu dieser Antwort? –

+0

Dies ist Windows-Verhalten. –

1

Die API-Aufrufe in dem Artikel verknüpft durch Kevin Haines verstecken Sie den Dialog Drucken wie folgt:

  1. Holen Sie sich das Handle des Dialogfensters Drucken.
  2. Nachricht an die Fenster eine Nachricht, es zu sagen, nicht
  3. Invalidate das Fenster neu zu zeichnen, die ein erneutes Zeichnen zwingt, die nie
  4. Sagen von Windows geschieht das Fenster neu zu zeichnen, die sie verschwinden verursacht.

Das ist vereinfacht, um es milde auszudrücken.

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

2

Wenn Sie den Druckdialog nicht anzeigen möchten, führen Sie einfach einen Makrotest wie folgt durch; Es wird kein Druckdialog angezeigt und der Standarddrucker wird erkannt und sofort gedruckt.

Führen Sie dieses Makro aus, und es wird das aktuell aktive Blatt gedruckt, ohne den Druckdialog anzuzeigen.