Hallo
Ich habe ein Excelfile, bei dem ich vor dem Drucken gewisse leere Spalten ausblenden möchte. Leider funktioniert der Code nicht immer, sodass auch ausgefüllte Spalten teilweise ausgeblendet werden. Ich kann mir aber nicht erklären, an was es liegen kann, dass die Spalten trotz Eintrag ausgeblendet werden. Kann mir vielleicht jemand sagen, ob ich in meinem Code einen Fehler habe, oder ob man ihn anders schreiben muss?
Zur Erklärung: Es handelt sich um ein Lohnabrechnungsblatt. In die Spalten K bis T werden diverse Arten von Spesen eingetragen. Somit kann innerhalb dieses Bereiches öfters eine Spalte leer oder nur Teilweise ausgefüllt sein. Wenn die Spalte im ganzen Bereich (Zeile 9 - 28) leer ist soll die ganze Spalte vor dem Drucken ausgeblendet werden. Ansonsten, wenn eine, mehrere, oder alle Zellen im Bereich ausgefüllt sind, soll die ganze Spalte vor dem Drucken angezeigt werden.
'Unbenutzte Spalten ausblenden im Bereich K bis T (ohne S)
Private Sub Workbook_BeforePrint(Cancel As Boolean)
If ActiveSheet.Name = "Lohnblatt" Then
Cancel = True
Application.EnableEvents = False
Application.ScreenUpdating = False
With ActiveSheet
.Unprotect Password:="FinDK"
On Error Resume Next
.Range("K9:K28").SpecialCells(xlCellTypeBlanks).EntireColumn.Hidden = True
.Range("K9:K28").SpecialCells(xlCellTypeConstants).EntireColumn.Hidden = False
.Range("M9:M28").SpecialCells(xlCellTypeBlanks).EntireColumn(L).Hidden = True
.Range("M9:M28").SpecialCells(xlCellTypeConstants).EntireColumn(L).Hidden = False
.Range("M9:M28").SpecialCells(xlCellTypeBlanks).EntireColumn.Hidden = True
.Range("M9:M28").SpecialCells(xlCellTypeConstants).EntireColumn.Hidden = False
.Range("N9:N28").SpecialCells(xlCellTypeBlanks).EntireColumn.Hidden = True
.Range("N9:N28").SpecialCells(xlCellTypeConstants).EntireColumn.Hidden = False
.Range("O9:O28").SpecialCells(xlCellTypeBlanks).EntireColumn.Hidden = True
.Range("O9:O28").SpecialCells(xlCellTypeConstants).EntireColumn.Hidden = False
.Range("P9:P28").SpecialCells(xlCellTypeBlanks).EntireColumn.Hidden = True
.Range("P9:P28").SpecialCells(xlCellTypeConstants).EntireColumn.Hidden = False
.Range("Q9:Q28").SpecialCells(xlCellTypeBlanks).EntireColumn.Hidden = True
.Range("Q9:Q28").SpecialCells(xlCellTypeConstants).EntireColumn.Hidden = False
.Range("R9:R28").SpecialCells(xlCellTypeBlanks).EntireColumn.Hidden = True
.Range("R9:R28").SpecialCells(xlCellTypeConstants).EntireColumn.Hidden = False
.Range("T9:T28").SpecialCells(xlCellTypeBlanks).EntireColumn.Hidden = True
.Range("T9:T28").SpecialCells(xlCellTypeConstants).EntireColumn.Hidden = False
.PageSetup.PrintArea = "A1:T32"
.PrintOut
On Error GoTo 0
.Protect Password:="FinDK"
End With
Application.EnableEvents = True
Application.ScreenUpdating = True
End If
End Sub
Zur Ergänzung:
Weiter habe ich auf dem Tabellenblatt noch einen Code, der aber einwandfrei funktioniert. Vielleicht stört sich irgendein Code am anderen (?).
Auch hier zur Erklärung: Es gibt verschiedene Abteilungen (B1) bei denen unterschiedliche Spalten angezeigt werden. Wenn die Abteilung ausgewählt ist und ein Name oder Ansatz eingetragen wird, kann die Abteilung nicht mehr geändert werden. Und zum Schluss einige Toggle-Buttons die via Knopfdruck Spalten ein- und ausblenden.
Private Sub Worksheet_Change(ByVal Target As Range)
Dim objCell As Range
On Error GoTo fehler
With ActiveSheet
If Intersect(Target, .Range("A1:U38")) Is Nothing Then Exit Sub
Application.EnableEvents = False
.Unprotect Password:="FinDK"
If .Range("B3").Value >= 550000 And .Range("B3").Value <= 570030 And .Range("B1").Value = "HBB LG" Or .Range("B1").Value = "HBB Ex" Then .Columns("E:E").Hidden = False Else .Columns("E:E").Hidden = True
If .Range("B1") = "IFK Ko" Then .Columns("H:H").Hidden = False Else .Columns("H:H").Hidden = True
If .Range("B1") = "BQ" Or .Range("B1") = "FI/VAE" Or .Range("B1") = "Admin" Then .Columns("S:S").Hidden = False Else .Columns("S:S").Hidden = True
If .Range("B1") = "BQ" Or .Range("B1") = "FI/VAE" Or .Range("B1") = "Admin" Then .Rows("2:2").Hidden = True Else .Rows("2:2").Hidden = False
If .Range("B1") = "Admin" Then .Rows("3:3").Hidden = True Else .Rows("3:3").Hidden = False
.Range("B4").Value = Format(Date, "DD.MM.YYYY")
With .Range("B1")
If Application.WorksheetFunction.CountA(ActiveSheet.Range("B9:B28,F9:F28")) = 0 Or IsEmpty(ActiveSheet.Range("B1")) Then
.Interior.ColorIndex = xlNone
.Locked = False
Else
With .Interior
.Pattern = xlSolid
.PatternColorIndex = xlAutomatic
.ThemeColor = xlThemeColorDark1
.TintAndShade = -0.249946592608417
.PatternTintAndShade = 0
End With
.Locked = True
End If
End With
.Range("A9:U28").Sort Key1:=.Range("B9"), Order1:=xlAscending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom
.Protect Password:="FinDK"
End With
fehler:
Application.EnableEvents = True
End Sub
'Reisespesen
Private Sub ToggleButton1_Click()
ActiveSheet.Unprotect Password:="FinDK"
ActiveCell.Activate
With Worksheets("Lohnblatt").ToggleButton1
.Caption = "" & IIf(.Value = True, "", "")
.BackColor = IIf(.Value = False, &HFFFFFF, &HC0C0C0)
If .Value = False Then
Worksheets("Lohnblatt").Columns("K:K").EntireColumn.Hidden = False
Else
Worksheets("Lohnblatt").Columns("K:K").EntireColumn.Hidden = True
End If
End With
ActiveSheet.Protect Password:="FinDK"
End Sub
'Autospesen
Private Sub ToggleButton2_Click()
ActiveSheet.Unprotect Password:="FinDK"
ActiveCell.Activate
With Worksheets("Lohnblatt").ToggleButton2
.Caption = "" & IIf(.Value = True, "", "")
.BackColor = IIf(.Value = False, &HFFFFFF, &HC0C0C0)
If .Value = False Then
Worksheets("Lohnblatt").Columns("L:M").EntireColumn.Hidden = False
Else
Worksheets("Lohnblatt").Columns("L:M").EntireColumn.Hidden = True
End If
End With
ActiveSheet.Protect Password:="FinDK"
End Sub
'Verpflegung mit Belegen
Private Sub ToggleButton3_Click()
ActiveSheet.Unprotect Password:="FinDK"
ActiveCell.Activate
With Worksheets("Lohnblatt").ToggleButton3
.Caption = "" & IIf(.Value = True, "", "")
.BackColor = IIf(.Value = False, &HFFFFFF, &HC0C0C0)
If .Value = False Then
Worksheets("Lohnblatt").Columns("N:N").EntireColumn.Hidden = False
Else
Worksheets("Lohnblatt").Columns("N:N").EntireColumn.Hidden = True
End If
End With
ActiveSheet.Protect Password:="FinDK"
End Sub
'Übernachtungen
Private Sub ToggleButton4_Click()
ActiveSheet.Unprotect Password:="FinDK"
ActiveCell.Activate
With Worksheets("Lohnblatt").ToggleButton4
.Caption = "" & IIf(.Value = True, "", "")
.BackColor = IIf(.Value = False, &HFFFFFF, &HC0C0C0)
If .Value = False Then
Worksheets("Lohnblatt").Columns("O:O").EntireColumn.Hidden = False
Else
Worksheets("Lohnblatt").Columns("O:O").EntireColumn.Hidden = True
End If
End With
ActiveSheet.Protect Password:="FinDK"
End Sub
'Einkauf Lebensmittel mit Beleg
Private Sub ToggleButton5_Click()
ActiveSheet.Unprotect Password:="FinDK"
ActiveCell.Activate
With Worksheets("Lohnblatt").ToggleButton5
.Caption = "" & IIf(.Value = True, "", "")
.BackColor = IIf(.Value = False, &HFFFFFF, &HC0C0C0)
If .Value = False Then
Worksheets("Lohnblatt").Columns("P:P").EntireColumn.Hidden = False
Else
Worksheets("Lohnblatt").Columns("P:P").EntireColumn.Hidden = True
End If
End With
ActiveSheet.Protect Password:="FinDK"
End Sub
'Einkauf Betriebsmaterial
Private Sub ToggleButton6_Click()
ActiveSheet.Unprotect Password:="FinDK"
ActiveCell.Activate
With Worksheets("Lohnblatt").ToggleButton6
.Caption = "" & IIf(.Value = True, "", "")
.BackColor = IIf(.Value = False, &HFFFFFF, &HC0C0C0)
If .Value = False Then
Worksheets("Lohnblatt").Columns("Q:Q").EntireColumn.Hidden = False
Else
Worksheets("Lohnblatt").Columns("Q:Q").EntireColumn.Hidden = True
End If
End With
ActiveSheet.Protect Password:="FinDK"
End Sub
'Weiterbildung
Private Sub ToggleButton7_Click()
ActiveSheet.Unprotect Password:="FinDK"
ActiveCell.Activate
With Worksheets("Lohnblatt").ToggleButton7
.Caption = "" & IIf(.Value = True, "", "")
.BackColor = IIf(.Value = False, &HFFFFFF, &HC0C0C0)
If .Value = False Then
Worksheets("Lohnblatt").Columns("R:R").EntireColumn.Hidden = False
Else
Worksheets("Lohnblatt").Columns("R:R").EntireColumn.Hidden = True
End If
End With
ActiveSheet.Protect Password:="FinDK"
End Sub
'Notizen
Private Sub ToggleButton8_Click()
ActiveSheet.Unprotect Password:="FinDK"
ActiveCell.Activate
With Worksheets("Lohnblatt").ToggleButton8
.Caption = "" & IIf(.Value = True, "", "")
.BackColor = IIf(.Value = False, &HFFFFFF, &HC0C0C0)
If .Value = False Then
Worksheets("Lohnblatt").Columns("T:T").EntireColumn.Hidden = False
Else
Worksheets("Lohnblatt").Columns("T:T").EntireColumn.Hidden = True
End If
End With
ActiveSheet.Protect Password:="FinDK"
End Sub
Ich danke vielmals für eure Bemühungen.
|