Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1220to1224
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Workbook_BeforePrint(Cancel As Boolean)

Workbook_BeforePrint(Cancel As Boolean)
DirkR
Guten Morgen Excelgemeinde,
Ich habe folgendes Problem und bitte um Mithilfe.
In der folgenden Datei möchte ich gerne überprüfen, ob ein "tatsächlicher" Drucker als Standard definiert ist. Wenn "Nein" dann soll der PrinterSetup Dialog aufgerufen werden. Das funzt auch ganz gut, solange ich über über das Drucksymbol in der Leiste drucke. Drucke ich allerdings über einen CommandButton hängt sich das ganze auf. Ich komme da nicht weiter :-(
Hier die Datei:
https://www.herber.de/bbs/user/75726.xls
Ich hoffe auf eure Hilfe!!!
Gruß
DIrk R
AW: Workbook_BeforePrint(Cancel As Boolean)
17.07.2011 09:13:27
Hajo_Zi
Hallo Dirk
ich hättte es vielleicht so geschrieben.
Option Explicit
Public BoDruck As Boolean
Sub PrinterTest()
Do
If Left(ActivePrinter, 11) = "FP_MultiDoc" Or _
Left(ActivePrinter, 7) = "FreePDF" Or _
Left(ActivePrinter, 9) = "Microsoft" Then
MsgBox "Bitte definieren Sie einen Standardrucker!", vbInformation, _
"Es ist kein Standarddrucker definiert"
Dim objWMI As Object, objItem As Object
If Application.Dialogs(xlDialogPrinterSetup).Show Then
Set objWMI = GetObject("winmgmts:\\.\root\cimv2").ExecQuery( _
"Select * from Win32_Printer")
For Each objItem In objWMI
If CBool(InStr(1, Application.ActivePrinter, objItem.Name)) Then
objItem.SetDefaultPrinter
Exit For
End If
Next
Set objWMI = Nothing
Set objItem = Nothing
End If
Else
BoDruck = True
Exit Do
End If
Loop
End Sub
' DieseArbeitsmappe
Private Sub Workbook_BeforePrint(Cancel As Boolean)
Call PrinterTest
If BoDruck = False Then Cancel = True
End Sub

Anzeige
AW: Workbook_BeforePrint(Cancel As Boolean)
17.07.2011 09:56:07
DirkR
Hallo Hajo,
danke für deine schnelle Antwort.
Leider funzt das auch nicht. Wenn ich im Test z.B. den "Microsoft Office Document Image Writer" als Standarddrucker definiert habe und mit dem CommandButton das Druckmacro starte, dann erscheint die MsgBox aber danach leider nicht DialogPrinterSetup. Genau an diesem Punkt komme ich nicht mehr aus dem Macro raus.
Gruß Dirk
AW: Workbook_BeforePrint(Cancel As Boolean)
17.07.2011 10:03:08
Hajo_Zi
Hallo Dirk,
in Deinem Beitrag Stand nicht das der Dialog nicht aufgeruufen wird, darum bin ich davon ausgegangen er wird aufgerufen und ich habe nur die Anpassung vorgenommen. Jetzt habe ich es mal ausführlicher getestet und kann bestätigen der Dilaog wird nicht aufgerufen, Da habe ich keinen Ansatz.
Gruß Hajo
Anzeige
AW: Workbook_BeforePrint(Cancel As Boolean)
17.07.2011 10:29:39
DirkR
Hallo Hajo,
danke für deine Antwort. Ich habe leider auch keine Idee!
Trotzdem vielen Dank!
Ich hoffe noch auf eine gute Idee aus dem Forum, daher Frage noch offen!
Gruß Dirk
AW: Workbook_BeforePrint(Cancel As Boolean)
17.07.2011 14:09:17
Tino
Hallo,
versuch es mal so.
kommt als Code in DieseArbeitsmappe
Option Explicit 
 
Private Sub Workbook_BeforePrint(Cancel As Boolean) 
If Not booCancel Then 
    Cancel = True 
    Application.OnTime Now + TimeSerial(0, 0, 1), "PrinterTest" 
Else 
    booCancel = False 
End If 
End Sub 
kommt als Code in Tabelle1
Option Explicit 
 
Private Sub CommandButton1_Click() 
 Call PrinterTest 
End Sub 
kommt als Code in Printer
Option Explicit 
 
Public booCancel As Boolean 
 
Sub PrinterTest() 
 
  Do While Left(ActivePrinter, 11) = "FP_MultiDoc" Or _
     Left(ActivePrinter, 7) = "FreePDF" Or _
     Left(ActivePrinter, 9) = "Microsoft" 
        MsgBox "Bitte definieren Sie einen Standardrucker!", vbInformation, _
        "Es ist kein Standarddrucker definiert" 
         
        If Not Application.Dialogs(xlDialogPrinterSetup).Show Then 
            MsgBox "Ausdruck wurde abgebrochen!", vbExclamation 
            Exit Sub 
        End If 
  Loop 
   
  booCancel = True 
  ActiveSheet.PrintOut From:=1, To:=1, Copies:=1, Collate:=True 
End Sub 
 
 
 
 
 
 
 
 
Gruß Tino
Anzeige
AW: Workbook_BeforePrint(Cancel As Boolean)
17.07.2011 14:52:10
DirkR
Hallo Toni,
danke für deine Antwort. Funzt super. Allerdings wird dabei der Standarddrucker nicht definiert.
Habe deinen Code etwas "umgebaut":
Sub PrinterTest()
Dim objWMI As Object, objItem As Object
Do While Left(ActivePrinter, 11) = "FP_MultiDoc" Or _
Left(ActivePrinter, 7) = "FreePDF" Or _
Left(ActivePrinter, 9) = "Microsoft"
MsgBox "Bitte definieren Sie einen Standardrucker!", vbInformation, _
"Es ist kein Standarddrucker definiert"
If Application.Dialogs(xlDialogPrinterSetup).Show Then
Set objWMI = GetObject("winmgmts:\\.\root\cimv2").ExecQuery( _
"Select * from Win32_Printer")
For Each objItem In objWMI
If CBool(InStr(1, Application.ActivePrinter, objItem.Name)) Then
objItem.SetDefaultPrinter
Exit For
End If
Next
Set objWMI = Nothing
Set objItem = Nothing
Else
MsgBox "Ausdruck wurde abgebrochen!", vbExclamation
Exit Sub
End If
Loop
booCancel = True
ActiveSheet.PrintOut From:=1, To:=1, Copies:=1, Collate:=True
End Sub
Nun scheint es zu klappen.
Vielen Dank!!!
Gruß Dirk
Anzeige
AW: Workbook_BeforePrint(Cancel As Boolean)
17.07.2011 15:06:54
Tino
Hallo,
um mit Excel auf einen bestimmten Drucker zu drucken
braucht man doch nicht gleich den Win Standarddrucker zu ändern?! Oder vielleicht doch?
Gruß Tino
AW: Workbook_BeforePrint(Cancel As Boolean)
17.07.2011 15:13:43
DirkR
Hallo Tino,
leider verstellt sich in unserem Netzwerk immer wieder mal der Standarddrucker. Die Kollegen, die dann etwas ausdrucken möchten verzweifeln daran. Nachdem der erste Druck dann fehl schlug, definieren die Kollegen sowieso den Standardducker auf einen "reellen" Drucker. Daher denke ich, dass dieser Arbeitsschritt direkt erledigt werden könnte.
Allerdings gebe ich dir insoweit recht, dass sie erstmal drucken könnten auch ohne den Standarddrucker per vba zu definieren.
Werde beide Versionen den Mitarbeitern mal zur Verfügung stellen. Werde dann nach Rückmeldung der Kollegen den einen oder anderen Code benutzen.
Nochmals Vielen Dank!!!
Gruß Dirk
Anzeige
mir würde dies nicht gefallen
17.07.2011 15:43:24
Tino
Hallo,
mich persönlich würde es ärgern wenn mein Win Standarddrucker
von einem Code ständig umgestellt wird.
Gruß Tino
AW: mir würde dies nicht gefallen
17.07.2011 16:25:14
DirkR
Hallo,
wird er ja nicht. Im Gegenteil.
Dadurch, dass sich Mitarbeiter an verschiedenen Recher gelentlich anmelden, verstellt Windows den WIN Standarddrucker ständig. Dadurch kommt es dazu, dass der "falsche" drucker als Standarddrucker definiert wird. Um dies wieder zu korrigieren, benutze ich das Macro.
Gruß Dirk
Zusatz......
17.07.2011 16:34:54
DirkR
Hallo Tino,
das ärgerliche ist, dass Windows oft dann ausgerechnet den "Microsoft Office Document Image Writer" als Standarddrucker definiert, der von keinem wirklich genutzt wird.
Daher versuche ich zumindest bei einem Teil der Excel-Dateien diesen "Fehler" mit VBA wieder zu korrigieren. Danach können die Mitarbeiter dann wenigstens an diesem Rechner wieder vernünftig den Tag lang drucken.
Gruß Dirk
Anzeige

61 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige