Microsoft Excel

Herbers Excel/VBA-Archiv

Informationen und Beispiele zum Thema MsgBox
BildScreenshot zu MsgBox MsgBox-Seite mit Beispielarbeitsmappe aufrufen

Markierten Zellbereich direkt ausdrucken | Herbers Excel-Forum


Betrifft: Markierten Zellbereich direkt ausdrucken von: Tom Kaiser
Geschrieben am: 09.12.2009 21:27:17

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.

  

Betrifft: AW: Markierten Zellbereich direkt ausdrucken von: Ramses
Geschrieben am: 09.12.2009 21:38:54

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


  

Betrifft: @Ramses : Man kann auch Objekte markiere _oT von: NoNet
Geschrieben am: 09.12.2009 22:38:47

MsgBox Typename(Selection)


  

Betrifft: Markierten Bereich als "Druckbereich" definieren von: NoNet
Geschrieben am: 09.12.2009 22:41:04

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


  

Betrifft: Auch eine Zelle ist ein markierter Bereich :-) von: Ramses
Geschrieben am: 09.12.2009 22:50:40

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


  

Betrifft: Man kann ja auch nicht alles haben ;-) _oT von: NoNet
Geschrieben am: 09.12.2009 22:52:15

_oT


  

Betrifft: AW: Markierten Bereich als "Druckbereich" definieren von: Tom Kaiser
Geschrieben am: 09.12.2009 23:31:21

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.


  

Betrifft: Hast Du mein Makro mal getestet ? von: NoNet
Geschrieben am: 10.12.2009 00:03:44

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


  

Betrifft: If TypeName(Selection) = "Range" Then... von: Luc:-?
Geschrieben am: 10.12.2009 02:14:19

...Warum nicht einfach so, NoNet...
ActiveWindow.RangeSelection...
Funktioniert das etwa nicht in einer EventProc...?
Gruß Luc :-?


  

Betrifft: AW: Hast Du mein Makro mal getestet ? von: Tom Kaiser
Geschrieben am: 10.12.2009 20:27:39

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?


  

Betrifft: Da machst Du etwas falsch ! von: NoNet
Geschrieben am: 10.12.2009 21:02:35

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


  

Betrifft: AW: Da machst Du etwas falsch ! von: Tom Kaiser
Geschrieben am: 10.12.2009 21:30:54

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


  

Betrifft: Abfrage bei nur 1 markierte Zelle verhindern von: NoNet
Geschrieben am: 10.12.2009 21:56:28

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


  

Betrifft: AW: Abfrage bei nur 1 markierte Zelle verhindern von: Tom Kaiser
Geschrieben am: 10.12.2009 23:36:04

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.


  

Betrifft: Willst Du mich veräppeln ? von: NoNet
Geschrieben am: 11.12.2009 00:03:55

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


  

Betrifft: AW: Markierten Zellbereich direkt ausdrucken von: Tom Kaiser
Geschrieben am: 11.12.2009 09:36:51

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.


Beiträge aus den Excel-Beispielen zum Thema "Markierten Zellbereich direkt ausdrucken"