AW: Makro für flexiblen Druckbereich
08.02.2008 13:39:00
fcs
Hallo Patricia,
ich hab mal zwei Varianten gebastelt. Beide Varianten setzen die Seitenumbrüche entsprechend und blenden auch die Zeilen ab Zeile 30 entsprechend ein/aus. Den Tabellennamen im Code ggf. noch anpassen.
Variante 1 wird automatisch vor dem Drucken/der Seitenvorschau ausgeführt. Einfügen muss du sie im VBA-Editor unter "DieseArbeitsmappe".
Variante 2 ist ein "normales" Makro, dass du ggf. auch per Makro-Button im Tabellenblatt starten könntest.
Gruß
Franz
'Variante 1
Private Sub Workbook_BeforePrint(Cancel As Boolean)
Dim wks As Worksheet, Zeile As Long
Select Case ActiveSheet.Name
Case "Tabelle1" 'Name der Tabelle die vor dem Drucken aufbereitet werden soll
If MsgBox("Plaketten drucken?", vbQuestion + vbYesNo) = vbYes Then
Set wks = ActiveSheet
Application.ScreenUpdating = False
With wks
.Cells.PageBreak = xlPageBreakNone
For Zeile = 30 To 209
If .Cells(Zeile, 1) = 0 Then
.Rows(Zeile).Hidden = True
ElseIf .Cells(Zeile, 1) = 1 Then
.Rows(Zeile).Hidden = False
Else
'do nothing
End If
Select Case Zeile
Case 30, 50, 70, 90, 110, 130, 150, 170, 190 'Zeilen mit ggf. Seitenwechsel
If .Cells(Zeile, 1) = 1 Then
.Cells(Zeile, 1).PageBreak = xlPageBreakManual
End If
Case Else
'do nothing
End Select
Next
End With
Application.ScreenUpdating = True
Else
Cancel = True
End If
Case Else
'do nothing
End Select
End Sub
'Variante 2
Sub DruckenPlaketten()
Dim wks As Worksheet, Zeile As Long
If MsgBox("Plaketten drucken?", vbQuestion + vbYesNo) = vbYes Then
Set wks = Worksheets("Tabelle1")
Application.ScreenUpdating = False
With wks
.Cells.PageBreak = xlPageBreakNone
For Zeile = 30 To 209
If .Cells(Zeile, 1) = 0 Then
.Rows(Zeile).Hidden = True
ElseIf .Cells(Zeile, 1) = 1 Then
.Rows(Zeile).Hidden = False
Else
'do nothing
End If
Select Case Zeile
Case 30, 50, 70, 90, 110, 130, 150, 170, 190 'Zeilen mit ggf. Seitenwechsel
If .Cells(Zeile, 1) = 1 Then
.Cells(Zeile, 1).PageBreak = xlPageBreakManual
End If
Case Else
'do nothing
End Select
Next
.PrintOut
' .PrintPreview
.Rows.Hidden = False 'Alle Zeilen wieder einblenden
End With
Application.ScreenUpdating = True
End If
End Sub