Excel macro wie datei nach druck automatisch schliessen ?
hallo zusammen,
stehe mal wieder aufm schlauch.
ich habe eine xls, die beim öffnen automatisch vb ausführt.
wenn genau diese xls ausgedruckt wird,muss duplex gedruckt werden, bei anderen xls KEIN duplex.
dazu hab ich mir was geschrieben,was auch funktioniert.
habe 2 drucker definiert, "normal" und "duplex"
beim öffnen der xls wird "duplex" einfach als standdarddrucker definiert,vor dem schliessen zurück auf "normal"
das funktioniert auch.
nun möchte ich aber,dass nach dem drucken (ich benutzte auschliesslich den druck-button in excel und gehe NICHT über datei/drucken) die datei automatisch geschlossen wird,ohne nachfrage des speicherns.
datei soll auch nicht gespeichert werden.
nun hatte ich hier im forum gesucht und was von bastl gefunden >> Sub FilePrintDefault()
das scheint sich aber nur auf world zu beziehen bzw funzt bei mir nicht.
wie bekomme ich das hin,dass nach klick auf den standard druck button die xls ohne nachfrage autoschliesst.
wo muss da der close befehl hin?
hier mal mein code zum wechseln der printer:
Sub ListAllPrinters()
Dim strComputer$, objWMI As Object, colPrinters As Object, objPrinter As Object
strComputer = "."
Set objWMI = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colPrinters = objWMI.ExecQuery("Select * from Win32_Printer")
For Each objPrinter In colPrinters
Debug.Print objPrinter.Name
Next
End Sub
Function ChangePrinter(ByVal strPrinter As String) As Boolean
Dim strComputer$, objWMI As Object, colPrinters As Object, objPrinter As Object
ChangePrinter = False
strComputer = "."
Set objWMI = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colPrinters = objWMI.ExecQuery("Select * from Win32_Printer")
For Each objPrinter In colPrinters
If objPrinter.Name Like strPrinter Then
objPrinter.SetDefaultPrinter
ChangePrinter = True
Exit For
End If
Next
End Function
Sub Switch_to_DUPLEX()
Debug.Print Application.ActivePrinter
ChangePrinter "DUPLEX_DRUCK"
Debug.Print Application.ActivePrinter
End Sub
Sub Switch_to_NORMAL()
Debug.Print Application.ActivePrinter
ChangePrinter "NORMAL_DRUCK"
Debug.Print Application.ActivePrinter
End Sub
Private Sub Workbook_open()
Switch_to_DUPLEX
End Sub
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Switch_to_NORMAL
End Sub
gruss/j
stehe mal wieder aufm schlauch.
ich habe eine xls, die beim öffnen automatisch vb ausführt.
wenn genau diese xls ausgedruckt wird,muss duplex gedruckt werden, bei anderen xls KEIN duplex.
dazu hab ich mir was geschrieben,was auch funktioniert.
habe 2 drucker definiert, "normal" und "duplex"
beim öffnen der xls wird "duplex" einfach als standdarddrucker definiert,vor dem schliessen zurück auf "normal"
das funktioniert auch.
nun möchte ich aber,dass nach dem drucken (ich benutzte auschliesslich den druck-button in excel und gehe NICHT über datei/drucken) die datei automatisch geschlossen wird,ohne nachfrage des speicherns.
datei soll auch nicht gespeichert werden.
nun hatte ich hier im forum gesucht und was von bastl gefunden >> Sub FilePrintDefault()
das scheint sich aber nur auf world zu beziehen bzw funzt bei mir nicht.
wie bekomme ich das hin,dass nach klick auf den standard druck button die xls ohne nachfrage autoschliesst.
wo muss da der close befehl hin?
hier mal mein code zum wechseln der printer:
Sub ListAllPrinters()
Dim strComputer$, objWMI As Object, colPrinters As Object, objPrinter As Object
strComputer = "."
Set objWMI = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colPrinters = objWMI.ExecQuery("Select * from Win32_Printer")
For Each objPrinter In colPrinters
Debug.Print objPrinter.Name
Next
End Sub
Function ChangePrinter(ByVal strPrinter As String) As Boolean
Dim strComputer$, objWMI As Object, colPrinters As Object, objPrinter As Object
ChangePrinter = False
strComputer = "."
Set objWMI = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colPrinters = objWMI.ExecQuery("Select * from Win32_Printer")
For Each objPrinter In colPrinters
If objPrinter.Name Like strPrinter Then
objPrinter.SetDefaultPrinter
ChangePrinter = True
Exit For
End If
Next
End Function
Sub Switch_to_DUPLEX()
Debug.Print Application.ActivePrinter
ChangePrinter "DUPLEX_DRUCK"
Debug.Print Application.ActivePrinter
End Sub
Sub Switch_to_NORMAL()
Debug.Print Application.ActivePrinter
ChangePrinter "NORMAL_DRUCK"
Debug.Print Application.ActivePrinter
End Sub
Private Sub Workbook_open()
Switch_to_DUPLEX
End Sub
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Switch_to_NORMAL
End Sub
gruss/j
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 182414
Url: https://administrator.de/forum/excel-macro-wie-datei-nach-druck-automatisch-schliessen-182414.html
Ausgedruckt am: 12.05.2025 um 09:05 Uhr
8 Kommentare
Neuester Kommentar
Moin john-carter,
auf die Schnelle: Hast Du die Chance, auf dem Sheet eine Schaltfläche oder eine 'aktive' Zelle unterzubringen, die das '.PrintOut' auslöst und danach schließt?
Die Befehle für 'Schließen ohne Speichern' sind Dir, denke ich, bekannt und können alle in das Sub reingesetzt werden.
Beispiel:
Freundliche Grüße von der Insel - Mario
auf die Schnelle: Hast Du die Chance, auf dem Sheet eine Schaltfläche oder eine 'aktive' Zelle unterzubringen, die das '.PrintOut' auslöst und danach schließt?
Die Befehle für 'Schließen ohne Speichern' sind Dir, denke ich, bekannt und können alle in das Sub reingesetzt werden.
Beispiel:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Address = "$B$2" Then ' (nur) Zelle "B2" reagiert auf Klick
' Call DuplexEin_Makro
' ActiveSheet.PrintOut
' Call DuplexAus_Makro
' ThisWorkbook.Saved = True
' ThisWorkbook.Close
End If
End Sub
Freundliche Grüße von der Insel - Mario
Moin john-carter,
ein Quelltext steht oben, wenn Du eine Schaltfläche bevorzugst, schreibst du den Code ohne die If-Abfrage in das zugehörige Sub. SF oder 'aktive Zelle' ist nur Geschmackssache, Funktion ist (in Deinem Falle) gleich.
Eventuell weist Du Benutzer mit einer MsgBox (in Zeile 4) darauf hin, dass jetzt die aktuelle Seite gedruckt und danach die Mappe geschlossen wird.
Freundliche Grüße von der Insel - Mario
ein Quelltext steht oben, wenn Du eine Schaltfläche bevorzugst, schreibst du den Code ohne die If-Abfrage in das zugehörige Sub. SF oder 'aktive Zelle' ist nur Geschmackssache, Funktion ist (in Deinem Falle) gleich.
Eventuell weist Du Benutzer mit einer MsgBox (in Zeile 4) darauf hin, dass jetzt die aktuelle Seite gedruckt und danach die Mappe geschlossen wird.
Freundliche Grüße von der Insel - Mario