HERBERS Excel-Forum - das Archiv
Nochmals Druckmakro
WalterK

Hallo,
nochmals eine Frage zu meinem Druckmakro. Den Teil ab "With ActiveSheet" habe ich selbst dazugewurstelt.
Nach der MSG-Box kommt der Druckerdialog und da klappt es noch nicht ganz:
1.) Wenn ich im Druckerdialog einen anderen als den Standard-Drucker auswähle, passiert zuerst einige Zeit nichts und dann wird trotzdem mit dem Standard-Drucker gedruckt.
2.) Wenn ich Abbrechen anklicke, wird trotzdem gedruckt.
Sub BlattEins()
Dim strActP As String, blnPrint As Boolean
strActP = Application.ActivePrinter
blnPrint = True
If MsgBox("Ihr aktiver Drucker ist: " & strActP & vbLf & _
"Möchten Sie die Druckaufträge mit diesem Drucker ausführen und haben Sie die ABNr erfasst  _
bzw. überprüft?", _
vbInformation + vbYesNo, "Drucken") = vbNo Then
blnPrint = Application.Dialogs(xlDialogPrinterSetup).Show
End If
'  If blnPrint Then ActiveSheet.PrintPreview
Application.ActivePrinter = strActP
With ActiveSheet
.PageSetup.PrintArea = "A4:P47"
.PageSetup.Orientation = xlPortrait
.PrintOut
End With
Application.ScreenUpdating = False
Range("A4:P162").Select
ActiveSheet.PageSetup.PrintArea = "$A$4:$P$162"
Range("G4").Select
Application.ScreenUpdating = True
End Sub
Wer kann mir bitte helfen?
Servus, Walter

AW: Nochmals Druckmakro
Daniel

Hi
naja, nach der Abfrage stellt du ja den ursprünglichen Drucker wieder ein und erst danach erfolgt der Befehl zum Ausdrucken.
der Befehl zum Ausdrucken wird IMMER ausgeführt, da vorher keine IF-Abfrage oder sonstige Prüfung auf Abbruch erfolgt.
ich habe die entsprechenden Stellen mal fett markiert:
Sub BlattEins()
Dim strActP As String, blnPrint As Boolean
strActP = Application.ActivePrinter
blnPrint = True
If MsgBox("Ihr aktiver Drucker ist: " & strActP & vbLf & _
"Möchten Sie die Druckaufträge mit diesem Drucker ausführen und haben Sie die ABNr erfasst   _
_
bzw. überprüft?", _
vbInformation + vbYesNo, "Drucken") = vbNo Then
blnPrint = Application.Dialogs(xlDialogPrinterSetup).Show
End If
'  If blnPrint Then ActiveSheet.PrintPreview
Application.ActivePrinter = strActP  'der erste Drucker wird wieder aktiviert
With ActiveSheet
.PageSetup.PrintArea = "A4:P47"
.PageSetup.Orientation = xlPortrait
 .PrintOut ' hier erfolgt er eigentliche Ausdruck, immer!
End With
Application.ScreenUpdating = False
Range("A4:P162").Select
ActiveSheet.PageSetup.PrintArea = "$A$4:$P$162"
Range("G4").Select
Application.ScreenUpdating = True
End Sub
Gruß, Daniel
OK, jetzt glaube ich zu wissen ....
WalterK

Hallo Daniel,
... warum es nicht funktioniert. Kannst Du mir auch noch behilflich sein, damit der Code richtig läuft.
Danke und Servus, Walter
AW: OK, jetzt glaube ich zu wissen ....
Daniel

HI
im prinzip schon, was ist denn deine nächste Frage?
Gruß, Daniel
AW: OK, jetzt glaube ich zu wissen ....
WalterK

Hallo Daniel;
Ziel ist
1.) dass ich beim Druckerdialog auch einen anderen Drucker auswählen kann und dann auch mit diesem gedruckt wird und
2.) wenn ich auf Abbrechen klicke, dass dann auch abgebrochen wird.
Ich bin totaler VBA-Laie und kann nichts davon selbst erledigen.
Servus, Walter
AW: OK, jetzt glaube ich zu wissen ....
Daniel

HI
wenn du absoluter VBA-Laie bist, von wem hast du dann diesen Code?
Gruß, Daniel
Wenn ich etwas in VBA brauche ...
WalterK

Hi
suche ich in der Recherche und versuche den Rest mittels Makrorekorder hinzubekommen.
So auch hier. Den 1. Teil habe ich im Forum erhalten, den Rest zusammengestückelt.
Servus, Walter
AW: Wenn ich etwas in VBA brauche ...
Daniel

Hi
da das Problem schneller gelöst als erklärt ist:
Sub BlattEins()
Dim strActP As String, blnPrint As Boolean
Dim auswahl As Long
strActP = Application.ActivePrinter
blnPrint = True
auswahl = MsgBox("Ihr aktiver Drucker ist: " & strActP & vbLf & "Möchten Sie die Druckaufträ _
ge mit diesem Drucker ausführen und haben Sie die ABNr erfasst zw. überprüft?", _
vbInformation + vbYesNo, "Drucken")
If auswahl = vbNo Then blnPrint = Application.Dialogs(xlDialogPrinterSetup).Show
If auswahl = vbYes Or blnPrint = True Then
With ActiveSheet
.PageSetup.PrintArea = "A4:P47"
.PageSetup.Orientation = xlPortrait
.PrintOut
End With
Application.ActivePrinter = strActP
end if
End Sub

Gruß, Daniel
Das ist ein wahres Wort ...
WalterK

Hallo Daniel,
... denn alles Erklären hätte nichts genutzt, wenn ich es nicht umsetzen kann.
Jetzt passt es wie es sein soll,
Danke und Servus, Walter
AW: Das ist aber eigentlich der Falsche
Daniel

Weg, den schließlich willst du ja nicht ewig am Forumstropf hängen, oder?
Gruß, Daniel