Herbers Excel-Forum - das Archiv

BeforePrint - Fehler

Bild

Betrifft: BeforePrint - Fehler
von: Thomas

Geschrieben am: 01.03.2005 17:47:40
Hallo Zusammen
Ich bin noch einmal bei euch, betreff Laufzeitfehler bei BeforePrint.
Modul: Diese Arbeitsmappe
Private Sub Workbook_BeforePrint(Cancel As Boolean)
Static wirklichDrucken As Boolean   'Semaphore
Dim wks1 As Worksheet, wks2 As Worksheet
If Not wirklichDrucken Then
Cancel = True
wirklichDrucken = True
'Zellenfarbe entfernen
Set wks1 = Worksheets("Zusammenfassung")
Set wks2 = Worksheets("Abrechnung")
wks1.Range("F12:I15,B21,B22:D22,H21:H22,A42,B45:B46").Interior.ColorIndex = xlNone
wks2.Range("C6:C9,C11,C13").Interior.ColorIndex = xlNone
ThisWorkbook.PrintOut
'       Set wks1 = Worksheets("Zusammenfassung")
Set wks2 = Worksheets("Abrechnung")
'       'Zellenfarbe setzen
With wks1.Range("F12:I12,F12:I15,B21,B22:D22,H21:H22,A42,B45:B46").Interior
.ColorIndex = 36
.Pattern = xlSolid
.PatternColorIndex = xlAutomatic
End With
With wks2.Range("C6:C9,C11,C13").Interior
.ColorIndex = 36
.Pattern = xlSolid
.PatternColorIndex = xlAutomatic
End With
Else
wirklichDrucken = False
End If
End Sub

Folgendes:
Wenn ich auf das Drucker-Symbol klicke funktionierts! Wenn ich auf das Seitenansicht-Symbol klicke, gibts Laufzeitfehler bei
wks1.Range("F12:I15,B21,B22:D22,H21:H22,A42,B45:B46").Interior.ColorIndex = xlNone
Habe herausgefunden, dass wenn ich den Range-Bereich einzel von Zellenformat lösche gehts!
wks1.Range("B22:D22").Interior.ColorIndex = xlNone
wks1.Range("H21:H22").Interior.ColorIndex = xlNone
wks1.Range("A42").Interior.ColorIndex = xlNone
wks1.Range("B45:B46").Interior.ColorIndex = xlNone
wks2.Range("C6:C9").Interior.ColorIndex = xlNone
wks2.Range("C11").Interior.ColorIndex = xlNone
wks2.Range("C13").Interior.ColorIndex = xlNone
Wieso? Weiss nicht mehr weiter und verliere das Vertrauen in VBA :-(
Gruss Thomas
Bild

Betrifft: AW: BeforePrint - Fehler
von: Luc:-?

Geschrieben am: 01.03.2005 19:46:39
Hallo Thomas,
das Vertrauen in MS kann man leicht verlieren, VBA ist ein bitchen besser! Ich denke, dass du bei allen anderen Ranges, die eine Mehrfachauswahl repräsentieren, ebenfalls diese Fehlermeldung bekommen müsstest. Mich wundert nicht, dass das WirklichDrucken funktioniert, denn da wdn diese Befehle ja nicht abgearbeitet. Du musst diese nicht zusammenhängenden Bereiche erst mit der Union-Methode zusammenfassen. Dann sollte es klappen.
Gruß Luc
Bild

Betrifft: AW: BeforePrint - Fehler
von: Thomas

Geschrieben am: 01.03.2005 20:16:13
Hi Luc
Ja, der Fehler kommt bei allen Mehrfachranges! Komisch aber nur bei Seitenansicht, nicht bei Drucken.
Habs mit Union versucht:
Set wks1 = Worksheets("Zusammenfassung")
Set wks2 = Worksheets("Abrechnung")
Set r1 = wks1.Range("B22:D22")
Set r2 = wks1.Range("H21:H22")
Set r3 = wks1.Range("A42")
Set r4 = wks1.Range("B45:B46")
Set r5 = wks2.Range("C6:C9")
Set r6 = wks2.Range("C11")
Set r7 = wks2.Range("C13")
Set Quellbereich = Union(r1, r2, r3, r4, r5, r6, r7)
Quellbereich.Interior.ColorIndex = xlNone
Gibt aber den gleichen Laufzeitfehler zurück.
Sche.... Lass ich das eben sein, wäre aber ein schöner Lerneffekt gewesen mit BeforPrint.
Gruss Thomas
Bild

Betrifft: wundert mich, teste mal, melde m.morgen - owT
von: Luc :-?
Geschrieben am: 01.03.2005 20:31:50
Bild

Betrifft: AW: BeforePrint - Fehler - alles klar!
von: Luc :-?

Geschrieben am: 02.03.2005 12:01:53
Hallo Thomas,
so, wie versprochen...
Der Fehler besteht darin, das Union nicht Bereiche verschiedener Blätter zusammenfassen kann. Du müsstest also auf jeden Fall für jedes Blatt einen Befehl schreiben. Da ich die Anlage so vieler Variablen für unnötig halte, hab ich dir hier mal beigelegt wie ich das machen würde. Dann macht auch with Sinn. Wenn du deine Variable Quellbereich als Datenfeld anlegst, könntest du das Farblöschen für viele Blätter rationeller gestalten (mittels Schleife). Übrigens gibt .ColorIndex 2 andere xlKonstanten als xlNone vor. Die haben aber den gleichen Wert - also geschenkt.
Sub ZellEntfärb()
Dim Quellbereich(1) As Range
With ActiveWorkbook.Sheets("Zusammenfassung")
Set Quellbereich(0) = Union(.Range("B22:D22"), _
.Range("H21:H22"), .Range("A42"), .Range("B45:B46"))
End With
With ActiveWorkbook.Sheets("Abrechnung")
Set Quellbereich(1) = Union(.Range("C6:C9"), _
.Range("C11"), .Range("C13"))
End With
Quellbereich(0).Interior.ColorIndex = xlNone
Quellbereich(1).Interior.ColorIndex = xlNone
End Sub

Aber wie gesagt, im Prinzip brauchst du nur 2 Quellbereiche.
Ciao Luc
Bild

Betrifft: AW: BeforePrint - Fehler - alles klar!
von: Thomas

Geschrieben am: 02.03.2005 19:22:42
Hallo Luc
Konnte deinen Code erst jetzt testen.
Vorweg: Vielen Dank für deine Hilfe!!!
Leider bringt auch dieser Code auf meinem Kasten den Laufzeitfehler: "Die Color-Index Eigenschaft des Interior-Objektes kann nicht festgelegt werden." bei: Quellbereich(1).Interior.ColorIndex = xlNone
Habe es jetzt so gelöst, dass jeder Bereich einzel entfärbt wird. Aufwändig, aber wenigstens funktionierts.
Danke nochmals.
Gruss Thomas
Bild

Betrifft: AW: BeforePrint - Fehler - seltsam?!
von: Luc

Geschrieben am: 03.03.2005 08:57:52
Hallo Thomas,
da muss dann MS was verschlimmbessert haben - unter MSO2k funkts ausgezeichnet. Warum meldet er den Fehler erst bei Qbereich(1) und nicht schon bei Qbereich(0)? Oder hast du die Indizes verändert? Ist der Qbereich richtig dimensioniert? Beginnen die Indizes mit 0 oder erst mit 1 (konnte bisher eingestellt wdn, Standard war 0)?
Gruß Luc
Bild

Betrifft: AW: BeforePrint - Fehler - seltsam?!
von: Thomas

Geschrieben am: 03.03.2005 10:01:43
Hi Luc
Habe zuerst alles so gemacht, wie du vorgeschlagen hast. Dann habe ich auch versucht, den Quellbereich anders zu dimensionieren. Hat leider alles nicht den gewünschten Erfolg gebracht.
Habe mich auch gewundert, warum erst bei Quellbereich(1) und nicht schon bei (0).
Naja, der Fachmann wundert sich, der Laie staunt !
Bill Gates ist ja jetzt zum Ritter geschlagen worden, vielleicht kann er jetzt mein Problem lösen :-)
Gruss Thomas
Bild

Betrifft: @Thomas: OK - u take it easy! - owT
von: Luc ;-?
Geschrieben am: 03.03.2005 12:30:54
 Bild
Excel-Beispiele zum Thema "BeforePrint - Fehler"
Fehlermeldung #NV ausblenden Fehlermeldung abfangen
Fehler in Workbook_Open-Prozedur abfangen Fehlermeldung #DIV/0! verhindern
Fehler entfernen Fehlermeldung abfangen und in sequentielle Datei schreiben
Fortlaufende Suche unter Vermeidung eines Laufzeitfehlers VBA-Fehlermeldungen auflisten
Alle Zellen mit der #BEZUG!-Fehlermeldung auswählen Zahlenstring mit Formel auslesen und Fehlermeldung verhindern