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

Makro Before Print funktioniert nicht

Makro Before Print funktioniert nicht
21.04.2022 20:11:49
mike49
Hallo,
ich habe eine Mappe 'Dienstplan' mit dem Arbeitsblatt 'Kalender (Übersich)'.
Im Arbeitsblatt habe ich über die Bedingte Formatierung ein "Fadenkreuz" für den Bereich B6:AF42 erstellt, das auch funktioniert.
Das farbige Fadenkreuz soll nicht mit ausgedruckt werden.
Deshalb wurde im Blatt Kalender (Übersicht) das Makro am Schluss eingefügt:

Private Sub Workbook_BeforePrint(Cancel As Boolean)
ActiveSheet.Unprotect
Range("B6:AF42").Interior.ColorIndex = 0
'  Range("D37").Select
ActiveSheet.Protect
End Sub
Leider funktioniert das nicht!
Was läuft da schief?
Gruß
mike49

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Makro Before Print funktioniert nicht
21.04.2022 21:04:57
ralf_b
soso DU hast also die bedingte Formatierung erstellt. Bist du dir da ganz sicher?
Vielleicht mußt du ja nur die Bedingte Formatierung anpassen um die Farbe zu modifizieren.
AW: Makro Before Print funktioniert nicht
21.04.2022 21:20:20
Yal
Hallo Mike,
wie der Name sagt "Workbook_BeforePrint", bezieht sich diese Makro auf das gesamte Arbeitsmappe und nicht gezielt auf einem Arbeitsblatt.
Daher wird diese Ereignis nie innerhalb eines Arbeitsblatt behandelt.
Du hast über den Codebereich links einen Dropdown-Auswahl, wo darin "(Allgemein)" steht. Sowohl in einem Blatt-Codepane als auch im "DieseArbeitsmappe"-Codepane.
Wenn Du in einer Arbeitsblatt bist, findest Du darin einen Eintrag "Worksheet". Schaltest Du diese an, fügt sich eine Procedure-Rumpft "Worksheet_SelectionChange". Diese SelectionChange findest Du auch in dem Dropdown-auswahl rechts über den Codepane. Schaue darin, was es sonst gibt. Es sind alle Worksheets-Ereignisse.
Gehst Du aber auf diese "(Allgemein)" in dem Codepane von "DieseArbeitsmappe", kannst Du nur "Workbook" auswählen und es fügt sich per Default "Workbook_Open". Siehe dann in dem rechten Dropdown welche Anträge zur Verfügung stehen. Es sind alle Workbook-Ereignisse.
Nun, wenn Du auf Workbook-Ebene eine BeforePrint verwendest, weisst dieses Ereignis nicht, in welchem Blatt Du gerade unterwegs bist. Das musst Du auswerten/prüfen:

Private Sub Workbook_BeforePrint(Cancel As Boolean)
If ActiveSheet.Name = "Tabelle1" Then
End If
End Sub
Solltest Du viele verscheidene Varianten haben, empfiehlt sich den Select Case:

Private Sub Workbook_BeforePrint(Cancel As Boolean)
Select Case ActiveSheet.Name
Case "Tabelle1", "Tabelle2"
Case "Tabelle3"
Case Else
End If
End Sub
Wenn etwas bei solcher Bastelei schief geht, kann es unter Umstand sinnvoll sein, den Druck zu unterbrechen. Das erreichst Du mit Cancel = True

Private Sub Workbook_BeforePrint(Cancel As Boolean)
Select Case ActiveSheet.Name
Case "Tabelle1", "Tabelle2"
Case Else
MsgBox "nur Blatt 1 & 2 dürfen gedruckt werden."
Cancel = True
End If
End Sub
Im übrigens:

Range("B6:AF42").Interior.ColorIndex = 0
bezieht sich dann immer auf das "Activesheet".
VG
Yal
Anzeige
AW: Makro Before Print funktioniert nicht
21.04.2022 22:06:05
mike49
Hallo Yal,
danke für die tolle Beschreibung. Aber irgendwie kriege ich das nicht hin!
Ich lade mal die Mappe hoch. Im Prinzip funktioniet alles, bis auf das Before_Print.
Vielleicht kannst du's dir mal anschauen?
https://www.herber.de/bbs/user/152578.xlsm
Gruß
mike49
AW: Makro Before Print funktioniert nicht
21.04.2022 22:52:53
onur
Kann ja gar nicht laufen. Du kannst nicht einfach eine Workbook_BeforePrint-Routine schreiben und sie in irgend einem Modul (in diesem Falle Blattmodul) plazieren. Du musst schon die VORHANDENEN Events nehmen, undv zwar das vorhandene Event im Workbokmodul.
Anzeige
AW: Makro Before Print funktioniert nicht
21.04.2022 23:44:18
Yal
Hallo Mike,
"Workbook_BeforePrint" gehört in dem "DieseArbeitsmappe"-Modul, das bei Dir in "DienstPlan" umbenannt wurde.
Dort findest Du ebenfalls einen "Workbook_Open", als Bestätigung, dass Du hier richtig bist.

Private Sub Workbook_BeforePrint(Cancel As Boolean)
Select Case ActiveSheet.Name
Case "Übersicht"
ActiveSheet.Unprotect
Range("B6:AF42").Interior.ColorIndex = 0
'  Range("D37").Select
ActiveSheet.Protect
Case Else
Cancel = True
End Select
End Sub
Achte auf ein sauberes Einrücken! So erhöhst Du die Lesbarkeit und die sofortige Erkennung von vielen Fehler (Dein Worksheet_Change ist ungeniessbar).
Vermeide die Wiederholung. Erzeuge dafür separaten Prozeduren, Konstanten dürfen Modul-global sein.
Urlaub gar nicht eintragen, anstatt zweimal Umswitchen! Unnötiger Brain fuck. Versteht nur kranke Programmierern.
Cancel kann man als Variable verwenden, entspricht aber nicht die Idee die dahinter steckt (na ok, da sind wir weit von "Kaum VBA-Kenntnisse" entfernt ;-)

Option Explicit
Const adRelBer$ = "B7:AF42, AS7:AS42"
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
If Not Intersect(Target, Me.Range(adRelBer)) Is Nothing Then
Cancel = True
If Range("AJ44").Value 
VG
Yal
Anzeige
Ja. So klappt's . . .
21.04.2022 23:35:48
mike49
. . . Danke für deine tolle Hilfe Yal.
LG
mike49

305 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige