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