john-carter
Goto Top

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

Content-Key: 182414

Url: https://administrator.de/contentid/182414

Ausgedruckt am: 28.03.2024 um 16:03 Uhr

Mitglied: mak-xxl
mak-xxl 22.03.2012 um 12:06:32 Uhr
Goto Top
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:
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
Mitglied: john-carter
john-carter 22.03.2012 um 12:15:54 Uhr
Goto Top
eigene schaltfläche wäre möglich,ja

schliessen ohne speichern kenne ich leider nicht.

und "'.PrintOut' auslöst und danach schließt" ist mir leider auch ein rätsel. genau das brauche ich ja eigentlich.primtout und schliessen.


gruss/j

edit;deinen code gerade erst gesehn, ich versuchs mal...
Mitglied: mak-xxl
mak-xxl 22.03.2012 um 12:25:21 Uhr
Goto Top
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
Mitglied: john-carter
john-carter 22.03.2012 um 12:34:49 Uhr
Goto Top
ok,habe nun einen button,
geht soweit auch alles.die xls wird sogar geschlossen,cool.

code:

Private Sub CommandButton1_Click()
ActiveSheet.PrintOut
ThisWorkbook.Saved = True
ThisWorkbook.Close
End Sub


leider bleibt excel selber geöffnet,excel müsste aber komplett beendet werden.

gruss/


edit:
hintergrund: ich hab ein webfrontend(apex) ,dort rufe ich mittels klick aus oracle blob table eine xls vorlage auf,sobald die volage automatisch geöffnet ist holt excel daten zum befüllen aus der db.gleichzeitig wird der passende printer eingestellt.
bin mittlerweile soweit ,dass ich ich wirklich nur einmal klicken muss im browser,der rest geht vollautomatisch.auch excel öffnet sich ohne nachfrage usw.
nur leider öffne ich über das frontend auch andere excel dateien. und jede excel datei ist in einem eigenen excel process geöffnet.wenn ich dann so 20 dinger auf hab,bekomm ich die kaum wieder zu,dauert ewig .wäre also gut,nach dem ausdrucken nicht nur die excel datei zu schliessen,sondern den jeweiligen excel process direkt mit.
Mitglied: mak-xxl
mak-xxl 22.03.2012 um 12:45:32 Uhr
Goto Top
Moin john-carter,

bitte um Milde, ich habe ein
Application.Quit
vergessen. Als letztes in den Sub eintragen.

Freundliche Grüße von der Insel - Mario
Mitglied: john-carter
john-carter 22.03.2012 um 12:50:01 Uhr
Goto Top
gerade selber ergoogelt,geht leider nicht.

excel bleibt geöffnet,leer ohne offene xls.


g/j

code:

Private Sub CommandButton1_Click()

ActiveSheet.PrintOut
ThisWorkbook.Saved = True
ThisWorkbook.Close
Application.Quit
End Sub
Mitglied: john-carter
john-carter 22.03.2012 um 12:56:52 Uhr
Goto Top
fehler gefunden:
ich darf NICHT ThisWorkbook.Close und dann Application.Quit ,sonst bleibt excel geöffnet.

einfach so:

rivate Sub CommandButton1_Click()

ActiveSheet.PrintOut
ThisWorkbook.Saved = True
Application.Quit
End Sub


klappt ebstens jetzt,vielen dank für deine schnelle hilfe,auch für die idee.manchmal holz vorm kopf....
Mitglied: mak-xxl
mak-xxl 22.03.2012 um 13:00:51 Uhr
Goto Top
Moin john-carter,

wenn keine weitere Tabelle in der Excel-Instanz geöffnet ist, dann 'ThisWorkbook.Close' durch 'Application.Quit' ersetzen.


Freundliche Grüße von der Insel - Mario