Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1120to1124
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

Markierten Zellbereich direkt ausdrucken

Markierten Zellbereich direkt ausdrucken
Tom
Hallo,
ich möchte, dass wenn ich einen bestimmten Zellbereich markiert habe, dieser Zellbereich direkt über die Schaltfläche "Drucken" ausgedruckt wird, und nicht erst über das Excel-Menü "Drucken / Markierung / OK". Und wenn keine Zellen markiert sind, soll wie gewohnt das gesamte Blatt gedruckt werden.
Weiß jemand, wie ich das anstelle?
Vielen Dank.
AW: Markierten Zellbereich direkt ausdrucken
09.12.2009 21:38:54
Ramses
Hallo
Bei VBA-Gut sollte dir der makrorekorder bekannt sein.
Direkt über die Schaltfläche "Drucker" in Excel geht das auf jeden Fall nicht.
By the Way:
"...wenn keine Zellen markiert sind..."
Es ist IMMER eine Zelle markiert.
Gruss Rainer
@Ramses : Man kann auch Objekte markiere _oT
09.12.2009 22:38:47
NoNet
MsgBox Typename(Selection)
Markierten Bereich als "Druckbereich" definieren
09.12.2009 22:41:04
NoNet
Hallo Tom,
kopiere folgenden Code in das Klassenmodul "DieseArbeitsmappe" :
Private Sub Workbook_BeforePrint(Cancel As Boolean)
If TypeName(Selection) = "Range" Then
ActiveSheet.PageSetup.PrintArea = Selection.Address
Else
ActiveSheet.PageSetup.PrintArea = "" 'alles drucken
End If
End Sub
Gruß, NoNet
Anzeige
Auch eine Zelle ist ein markierter Bereich :-)
09.12.2009 22:50:40
Ramses
Hallo
Nun kann er aber in der gesamten Mappe keine ganze Seiten mehr ausdrucken, wenn er keine Objekte auf der Tabelle hat zum markieren oder er nicht jeweils den ganzen zu druckenden Bereich markiert.
Der nächste Fragenlevel ist daher dann:
Wie kann ich die ganze Seite drucken wenn ich nur eine Zelle gewählt habe !? ;-)
Gruss Rainer
Man kann ja auch nicht alles haben ;-) _oT
09.12.2009 22:52:15
NoNet
_oT
AW: Markierten Bereich als "Druckbereich" definieren
09.12.2009 23:31:21
Tom
Vielen Dank für Dein Makro, aber soweit war ich auch schon und so funktioniert es leider nicht. Wenn vorher ein Druckbereich festgelegt wurde, ist er mit Deinem Makro zerstört. Außerdem kommt eine Fehlermeldung nach dem zweiten Mal drucken, wenn man dann nichts markiert hat. Ich habe dieses Makro verwendet:
Private Sub Workbook_BeforePrint(ByRef Cancel As Boolean)
FRow = Range(Selection.Address).Row
LRow = Range(Selection.Address).Row + Selection.Rows.Count - 1
FColumn = Range(Selection.Address).Column
LColumn = Range(Selection.Address).Column + Selection.Columns.Count - 1
xRow = LRow - FRow + 1
xColumn = LColumn - FColumn + 1
xZellen = xRow * xColumn
If xZellen > 1 Then Selection.PrintOut
End Sub
Das funktioniert zwar, bleibt aber mit einer Fehlermeldung stehen. Wenn man diese Fehlermeldung dann ignoriert, wird wunschgemäß gedruckt.
Ich muß aber die Fehlermeldung wegbekommen.
Hat noch jemand eine Idee? Ist wirklich sehr wichtig.
Anzeige
Hast Du mein Makro mal getestet ?
10.12.2009 00:03:44
NoNet
Hallo Tom,
Du hattest nicht erwähnt, dass Du bereits ein Makro dafür verwendest !
Zumindest funktioniert mein Makro einwandfrei auf meinem PC - hast Du das überhaupt mal getestet ?
Logischerweise wird ein bereits bestehender Druckbereich überschrieben/zerstört, bei "VBA gut" gehe ich aber davon aus, dass Du diesen selbst in einer Variable speichern kannst :
Public bolDrucken As Boolean
Private Sub Workbook_BeforePrint(Cancel As Boolean)
Dim strDruckbereich As String
strDruckbereich = ActiveSheet.PageSetup.PrintArea
If TypeName(Selection) = "Range" Then
ActiveSheet.PageSetup.PrintArea = Selection.Address
Else
ActiveSheet.PageSetup.PrintArea = "" 'alles drucken
End If
If Not bolDrucken Then Cancel = True
bolDrucken = Not bolDrucken
ActiveSheet.PrintOut
ActiveSheet.PageSetup.PrintArea = strDruckbereich
End Sub
"Dein Code" würde funktionieren, wenn am Ende ActiveSheet.PrintOut anstatt Selection.PrintOut stünde - allerdings würde dann auch doppelt gedruckt werden !
Daher nochmal meine Empfehlung : Nimm MEINEN Code, der funktioniert astrein !!
Gruß, NoNet
Anzeige
If TypeName(Selection) = "Range" Then...
10.12.2009 02:14:19
Luc:-?
...Warum nicht einfach so, NoNet...
ActiveWindow.RangeSelection...
Funktioniert das etwa nicht in einer EventProc...?
Gruß Luc :-?
AW: Hast Du mein Makro mal getestet ?
10.12.2009 20:27:39
Tom
Hallo,
ich hätte nicht gedacht, dass dieses Thema so schwierig zu lösen ist. Jedenfalls funktioniert Dein letzter Lösungsvorschlag auch nicht. Ich habe Excel 2003 und nach kopieren Deines Makros in "Diese Arbeitsmappe" druckt er überhaupt nicht mehr. Außerdem läßt sich nach Einbau des Makros das Menü Datei / Drucken nicht mehr starten. Es kommt eine Fehlermeldung, dass nur eine Zelle als Druckbereich markiert ist. Ich könnte damit leben, aber es ist keine saubere Lösung.
Ist dieses Thema wirklich so schwer zu lösen?
Anzeige
Da machst Du etwas falsch !
10.12.2009 21:02:35
NoNet
Hallo Tom,
nochmal : Das Makro funktioniert zu 100% (die Zeile "Public ..." gehört natürlich mit in den Code - ist im Beitrag oben leider nicht gut zu erkennen !)
Falls das bei Dir nicht funktioniert, spinnt entweder Dein Excel oder Du machst etwas falsch.
Lade doch mal Deine Datei hoch !
Gruß, NoNet
AW: Da machst Du etwas falsch !
10.12.2009 21:30:54
Tom
Vielen Dank für Deine Hilfe. Das finde ich wirklich sehr nett.
Im Anhang übersende ich Dir meine Datei. Wenn ich einige Zellen markiere und dann drucke, funktioniert es einwandfrei. Wenn ich aber dann nichts markiere und drucke, kommt eine Warnmeldung, dass nur eine Zelle als Druckbereich ausgewählt wurde. Wenn ich dann abbreche, geht der Debugger auf. Das passiert auch, wenn ich über Datei / Drucken gehe.
https://www.herber.de/bbs/user/66504.xls
Anzeige
Abfrage bei nur 1 markierte Zelle verhindern
10.12.2009 21:56:28
NoNet
Hallo Tom,
diese Abfrage kannst Du per Application.DisplayAlerts=FALSE unterbinden.
Bei "VBA gut" gehe ich eigentlich davon aus, dass Du darauf selbst kommen könntest - Evtl. solltest Du Deinen VBA-Level nochmals überdenken ?
Public bolDrucken As Boolean
Private Sub Workbook_BeforePrint(Cancel As Boolean)
Dim strDruckbereich As String
strDruckbereich = ActiveSheet.PageSetup.PrintArea
If TypeName(Selection) = "Range" Then
Application.DisplayAlerts = False
ActiveSheet.PageSetup.PrintArea = Selection.Address
Application.DisplayAlerts = True
Else
ActiveSheet.PageSetup.PrintArea = "" 'alles drucken
End If
If Not bolDrucken Then Cancel = True
bolDrucken = Not bolDrucken
ActiveSheet.PrintOut
ActiveSheet.PageSetup.PrintArea = strDruckbereich
End Sub
Gruß, NoNet
Anzeige
AW: Abfrage bei nur 1 markierte Zelle verhindern
10.12.2009 23:36:04
Tom
Vielen Dank für Deine Bemühungen. Klar kenne ich "Application.DisplayAlerts=FALSE". Aber da Du so drauf geschworen hast, dass Dein Makro hunderprozentig funktioniert, habe ich natürlich nicht damit gerechnet, dass Dir als Profi dieser Fehler unterlaufen ist ;-)
Jedenfalls scheinst Du auch das letzte Makro nicht richtig getestet zu haben. Denn jetzt läßt sich das gesamte Blatt gar nicht mehr ausdrucken. Wenn man keinen Zellbereich markiert, wird nur die eine Zelle gedruckt, wo gerade der Zellzeiger steht. Und an das Menü "Datei / Drucken" kommt man jetzt gar nicht mehr ran. Es öffnet sich nicht mehr, sondern es wird gleich die eine Zelle gedruckt. Das ist keine gute Lösung. Probier es doch bitte selbst mal aus.
Anzeige
Willst Du mich veräppeln ?
11.12.2009 00:03:55
NoNet
Hallo Tom,
ich gewinne so langsam den Eindruck, Du willst "Katz und Maus" spielen ?
Woher soll ich denn wissen, WAS Du möchtest, wenn Du es nicht genau beschreibst ?
Erst schreibst Du, es soll exakt der markierte Zellbereich (Hinweis: das kann auch nur eine EINZELNE Zelle sein !) gedruckt werden und nun möchtest Du ALLES drucken wenn nur eine Zelle markiert ist ! Das hattest Du nicht erwähnt !
Oder möchtest Du nur Ramses als Hellseher bestätigen : https://www.herber.de/forum/archiv/1120to1124/t1122758.htm#1122779
Und dass Du das (offenbar) nicht selbst lösen kannst, ist ein weiteres Indiz dafür, dass "VBA gut" sehr hoch gepokert war - hier die Lösung (oder hast Du noch ein paar bislang nicht erwähnte Extrawünsche ?) :
Public bolDrucken As Boolean
Private Sub Workbook_BeforePrint(Cancel As Boolean)
Dim strDruckbereich As String
strDruckbereich = ActiveSheet.PageSetup.PrintArea
If TypeName(Selection) = "Range" Then
If Selection.Cells.Count = 1 Then
ActiveSheet.PageSetup.PrintArea = "" 'alles drucken
Else
ActiveSheet.PageSetup.PrintArea = Selection.Address
End If
Else
ActiveSheet.PageSetup.PrintArea = "" 'alles drucken
End If
If Not bolDrucken Then Cancel = True
bolDrucken = Not bolDrucken
ActiveSheet.PrintOut
ActiveSheet.PageSetup.PrintArea = strDruckbereich
End Sub
Dass sich nun der Menüpunkt "Datei - Drucken" nicht mehr öffnen lässt, liegt daran, dass dabei exakt das gleiche Ereignis ausgelöst wird wie beim "Drucken"-Icon. Das lässt sich auch nicht verhindern/unterscheiden !
Alternative : Verwende für den automatischen Druck ein eigenes DRUCKEN-Icon und weise diesem den Code zu !
Gruß, NoNet
Anzeige
AW: Markierten Zellbereich direkt ausdrucken
11.12.2009 09:36:51
Tom
Vielen Dank für Dein Makro. Ich will Dich doch nicht ver...! Aber wenn Du bitte nochmal meinen ersten Beitrag lesen möchtest, da steht doch ganz deutlich: "Und wenn keine Zellen markiert sind, soll wie gewohnt das gesamte Blatt gedruckt werden." Schon Ramses hat sich mit dieser Zeile schwer getan. Es handelt sich um die Mehrzahl ("Zellen"). Und wenn nicht mehrere Zellen in einem Blatt markiert sind, ist doch automatisch nur eine Zelle dran, oder? Ich hatte angenommen, das wäre eindeutig. Und wenn Du ehrlich zu Dir bist, hattest Du Deine Makrovorschläge doch nicht wirklich nach allen Seiten abgetestet. Das hast Du doch auch sicherlich hinterher bemerkt.
Es ist schade, dass der Ton in solchen Foren immer schnell sehr herb wird. Ich würde jedenfalls nie jemanden beleidigen, so wie Du es eben getan hast. Ich habe mich doch in meinen Beiträgen immer korrekt und höflich verhalten. Sollte es anders angekommen sein, bitte ich das zu entschuldigen. Bin vielleicht für den einen oder anderen Jargon schon zu alt.
Anzeige

255 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige