Vba PageSetup Füllfarbe ändern

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