Da es hier ja wohl weniger darum geht, massenhaft Klausuren und Zeugnisse auszuwerten, sondern mehr die Ergebnisse von Klausuren zu erfassen um am Ende des Ausbildungsjahres Zeugnisse erstellen zu können, habe ich weniger Probleme mit der Anzahl der Tabellenblätter. Allerdings waren die wohl eher nicht dafür geeignet, um die "Pflegekräfte" (Hier, die Personen, die Ergebnisse von Klausuren eintragen sollen) in Begeisterung zu versetzen.
Zur Pflege der Teilnehmer eines Kurses, gibt es nun das Tabellenblatt "Tn" (Teilnehmer). Alle anderen ziehen sich die notwendigen Daten von dort. Da ich davon ausgehe, dass die Tabellen nie sortiert werden, geschieht dies mit festen Zuordnungen, anstatt mittels Index/Vergleich.
Bereits in der Ersten Version hat ja die Makrosteuerung zum automatischen filtern und ausblenden nicht benötigter Zeilen und Spalten gut funktioniert. Wenn aber die Tabellenblätter och nicht fertig sind, oder diese wegen Änderungen der Ausbildungspläne angepasst werdne müssen, dann ist es sehr lästig, wenn nach jeder Blattaktivierung wieder eingeblendet und der Filter gelöscht werden muss, damit Formeländerungen für das gesamte Blatt durchgeführt werden können.
Deshalb habe die dazu das Tabellenblatt "Custom" (Customizing) angelegt. in Diesem kann nun von außen gesteuert werden, welche Aktionen durchgeführt werden sollen.
Im Makro "Filter_Field_3" wird nun als Erstes geprüft, in dem auslösendem Tabellenblatt auch eine formatierte Tabelle enthalten ist.
Weiterhin wird nun geprüft, ob sich auf der auszublenden Zeile 6 auch tatsächlich die Kopfzeile der Ersten formatierten Tabelle befindet und ob sich die Filterspalte auch auf Spalte "C" befindet.
Nur dann werden die Aktionen in "Custom" aktivierten Funktionen auch ausgeführt.
Nicht realisiert habe ich den Blattschutz, damit noch etwas Arbeit für den Fragesteller übrig bleibt. Hierbei ist allerdings zu beachten, dass dieser dann zu Beginn des Makros deaktiviert und am Ende des Makros wieder aktiviert werden muss, den Aktionen wie filtern und ein-/ausblenden, funktionieren nur, wenn das Tabellenblatt, bzw. die formatierte Tabelle nicht geschützt ist.
Zur Verringerung des Risikos, dass mal Ergebnisse im falschen Ausbildungsjahr eingetragen werden, habe ich diese mit einer Farbmarkierung versehen.
Code:
Sub Filter_Field_3()
Dim Anz As Integer
Dim Header_Row As Integer
Dim Filter_Col As String
' Wenn das Tabellenblatt mindestns eine formatierte Tabelle enthält,
' wird die Erste für die weiteren Aktionen berücksichtigt.
Anz = ActiveSheet.ListObjects.Count
If Anz = 0 Then
Exit Sub
End If
Header_Row = ActiveSheet.ListObjects(1).HeaderRowRange.Row
Filter_Col = ActiveSheet.ListObjects(1).HeaderRowRange.Columns(3)
' Filtern und/oder ausblenden nur, wenn der LO-Header Zeile = 6
' und Titel von Col3 = "Filter" ist
If Header_Row <> 6 Or _
Filter_Col <> "Filter" Then
Exit Sub
End If
Application.ScreenUpdating = False
' Filtern und ausblenden nur, wenn im Tabellenblatt "Custom"
' die Parameter auf "Ja" stehen
If Range("p_Filter") = "Ja" Then
ActiveSheet.ListObjects(1).Range.AutoFilter Field:=3, Criteria1:="=Ja", Operator:=xlAnd
End If
If Range("p_Hide_C") = "Ja" Then
Columns("C:C").Hidden = True
End If
If Range("p_Hide_6") = "Ja" Then
Rows("6:6").Hidden = True
End If
Application.ScreenUpdating = True
End Sub