Hallo,
Habe in Excel 2007 Tabellen Blatt mit ein Druckbereich, der mit mehren Füllfarben gefüllt ist.
Möchte aber die Farbe (ColorIndex) 15 nicht mit Drucken.
Es soll nicht dabei das Tabellenblatt verändert werden.
Dachte an PageSetup dort die Farbe (ColorIndex) 15 auf ColorIndex -4142 (xlNone) setzen.
Habe leider nicht passendes gefunden beim Googeln.
Danke Manfred
Hallo Manfred,
also ganz kommst du glaube ich nicht drumrum, das Tabellenblatt (wenigstens für den Druck) zu verändern. Ich habe dir mal 2 Makros geschrieben. Den Code musst du in den Codebereich des Tabellenblatts kopieren:
Option Explicit
Option Base 1
Dim farbe As Boolean
Dim adresse As Variant
Sub farbeAn()
Dim i As Long
For i = 1 To UBound(adresse)
Range(adresse(i)).Interior.ColorIndex = 15
Next i
End Sub
Sub farbeAus()
Dim zelle As Range
Dim i As Long
i = 0
ReDim adresse(1)
For Each zelle In Range(ActiveSheet.PageSetup.PrintArea)
If zelle.Interior.ColorIndex = 15 Then
i = i + 1
ReDim Preserve adresse(i)
adresse(i) = zelle.Address
zelle.Interior.ColorIndex = xlNone
End If
Next zelle
End Sub
Das Makro „farbeAus“ schaltet im Druckbereich alle Zellen mit Hintergrundfarbindex 15 auf Farbindex xlNone. Es merkt sich aber alle veränderten Zellen.
Danach kannst du drucken.
Nach dem Drucken kannst du mit dem Makro „farbeAn“ die Hintergrundfarbe wieder einschalten.
Wie du die Makros startest (über ALT-F8, oder ob du dir zwei Knöpchen baust) überlasse ich dir.
Natürlich könnte man die Makros auch noch zu einem kombinieren, der das Drucken gleich mit übernimmt. Dazu hatte ich aber eben keine Zeit und Lust mehr. Ich gehöre ins Bett.
Melde dich, wenn du noch Probleme/Fragen/Wünsch hast.
Gruß, Andreas
Hallo Andreas,
Ich hab‘s vermutet! Danke für die Komplet Lösung.
Danke für die schnelle Antwort. Sorry das ich erst jetzt antworte.
Manfred
Hallo Andreas,
Kann denn Code nicht so anpassen das keine Knöpfen gedrückt werden.
So das der User nichts machen muß außer STRG + P zudrücken.
Vieleicht weißt auch noch wie man einen 2. Druckbereich am selben Tabellenblatt unten am selben Din A4 Blatt anhängen kann,wie 1.Druckbereich.
Danke Manfred
Hallo Andreas,
Hallo Manfred,
Kann denn Code nicht so anpassen das keine Knöpfen gedrückt
werden.
So das der User nichts machen muß außer STRG + P zudrücken.
Ja, das geht, das kann ich dir heute abend zusammenbauen.
Vieleicht weißt auch noch wie man einen 2. Druckbereich am
selben Tabellenblatt unten am selben Din A4 Blatt anhängen
kann,wie 1.Druckbereich.
So viel ich weiß, kann zwar der Druckbereich aus mehreren Zellenbereichen bestehen. Da wird aber jeder Bereich auf eine Extrablatt gedruckt.
Wenn du alles auf ein Blatt haben willst, müsste man zur Not in dem Makro eine Kopierfunktion enbauen, der die Bereiche erst temporär zu einem Bereich zusammenkopiert, dann druckt und die Kopie danach wieder löscht
Danke Manfred
Gruß, Andreas
Neuer Code
Hi Manfred,
ich habe jetzt mal die beiden Routinen zusammengebaut und einen Druckauftrag dazwischen geschoben.
Dieser Code muss in den Codebereich von „DieseArbeitsmappe“:
Option Explicit
Private Sub Workbook\_BeforePrint(Cancel As Boolean)
Cancel = True
SW\_Druck
End Sub
Und dieser Code muss in ein Standardmodul:
Option Explicit
Option Base 1
Sub SW\_Druck()
Dim zelle As Range
Dim i As Long, dB As Long
Dim druckBereiche As Variant
Dim adresse As Variant
' Farbe ausschalten:
i = 0
druckBereiche = Split(ActiveSheet.PageSetup.PrintArea, ";")
ReDim adresse(1)
For dB = 0 To UBound(druckBereiche)
For Each zelle In Range(druckBereiche(dB))
If zelle.Interior.ColorIndex = 15 Then
i = i + 1
ReDim Preserve adresse(i)
adresse(i) = zelle.Address
zelle.Interior.ColorIndex = xlNone
End If
Next zelle
Next dB
' Druckfenster:
Application.EnableEvents = False
Application.Dialogs(xlDialogPrint).Show
Application.EnableEvents = True
' Farbe wieder an:
For i = 1 To UBound(adresse)
Range(adresse(i)).Interior.ColorIndex = 15
Next i
End Sub
Das Drucken kannst du jetzt ganz normal über das Menü, den Druckbutton oder Strg-P starten.
Wie heute Morgen geschrieben: Der Druckbereich kann auch aus mehreren Zellenbereichen bestehen. Der Makro kommt damit zurecht. Allerdings wird bisher noch jeder Zellenbereich auf ein eigenes Blatt gedruckt.
Du müsstest mal etwas genauer erzählen, wie die Druckbereiche bei dir aussehen und wo sie auf das Blatt gedruckt werden sollen. Dann könnte man den Makro so erweitern, dass er die Bereiche auf einem Blatt zusammenfasst, so sie denn passen.
Gruß, Andreas
Hi Andreas,
Du müsstest mal etwas genauer erzählen, wie die Druckbereiche
bei dir aussehen und wo sie auf das Blatt gedruckt werden
sollen. Dann könnte man den Makro so erweitern, dass er die
Bereiche auf einem Blatt zusammenfasst, so sie denn passen.
Die Zellen
E1:F1
G1:H1
I1:J1
K1:L1
(Sind verbundene Zellen)
M1
(ist eine einzelene Zelle)
Sollten unten am Ende des Blattes Wagrecht angeführt werden.
Gruß, Manfred
Warum so häppchenweise?
Hi Manfred,
damit kann ich wenig anfangen. Nenn doch einfach mal Ross und Reiter:
Der erste Druckbereich geht von A1 bis H10, oder was auch immer.
Der zweite Druckbereich geht von A15 bis H24, oder was auch immer.
Oder am besten lad doch mal die Mappe hoch, wenn sie nicht top-secret ist, z.B. hier:
http://www.file-upload.net/
Und bitte schreib dazu, wo die Druckbereiche sein sollen.
Gruß, Andreas
Hallo,
Warum so häppchenweise?
habe die erfahrung gemacht, nicht zuviel erzählen hier, sonst wirds zu komplieziert.
entschuldige mich war etwas früh und auf die schnelle
Meine beiden Druckbereiche sind.
Stunden!$A$2:blush:R$52
Stunden!$E$1:blush:M$1
Der bereich $E$1:blush:M$1 soll unterhalb von bereich $A$2:blush:R$52 gedruckt werden.
Danke Manfred
Hallo Manfred,
Als Schnelllösung: Wäre dir geholfen, wenn du den 2. Druckbereich als Fußzeile auf der Seite hast? Sonst würde ich noch mal drüber nachdenken, wie es anders geht, z.B. mit temporärem Kopieren, oder so.
Option Explicit
Option Base 1
Sub SW\_Druck()
Dim zelle As Range
Dim i As Long, dB As Long
Dim druckBereiche As Variant
Dim adresse As Variant
Dim sp As Long
' Farbe ausschalten:
i = 0
druckBereiche = Split(ActiveSheet.PageSetup.PrintArea, ";")
ReDim adresse(1)
For dB = 0 To UBound(druckBereiche)
For Each zelle In Range(druckBereiche(dB))
If zelle.Interior.ColorIndex = 15 Then
i = i + 1
ReDim Preserve adresse(i)
adresse(i) = zelle.Address
zelle.Interior.ColorIndex = xlNone
End If
Next zelle
Next dB
' 2. Druckbereich als Fußzeile:
With ActiveSheet.PageSetup
.CenterFooter = ""
For sp = 5 To 13
.CenterFooter = .CenterFooter & Cells(1, sp).Value
Next sp
End With
' Druckfenster:
Application.EnableEvents = False
Application.Dialogs(xlDialogPrint).Show
Application.EnableEvents = True
' Farbe wieder an:
For i = 1 To UBound(adresse)
Range(adresse(i)).Interior.ColorIndex = 15
Next i
End Sub
Gruß, Andreas
Hallo Andreas
Als Schnelllösung: Wäre dir geholfen, wenn du den 2.
Druckbereich als Fußzeile auf der Seite hast? Sonst würde ich
noch mal drüber nachdenken, wie es anders geht, z.B. mit
temporärem Kopieren, oder so.
Habes mit Kopieren gelöst.
Danke für den Code.
Gruß Manfred