Hallo,
ich habe vor kurzem begonnen mich mit VBA auseinanderzusetzten und habe mir für die Arbeit eine Tabelle mit Makros gebastelt.
In der Tabelle habe ich senkrecht Kompetenzen nach den einzelnen Bereichen aufgetragen nd horizontal die Mitarbeiter.
Ich habe nun mehrere Makros erstellt, welche die Tabelle jeweils nach einem Bereich filtern (anhand einer Nummer) und anschließend diesen Bereich nach leren Spalten durchsuchen und diese ausblenden.
An sich funktioniert alles, nur eine Sache stört mich:
Da immer wieder Kompetenzen hinzugefügt werden, muss ich die Makros immer wieder nachbearbeiten.
Der Filter funktiniert dynamisch, aber durch das hinzufügen von Kompetenzen ändert sich immer der Bereich in dem das Makro nach leeren Spalten sucht um diese dann auszublenden.
Um nicht immer nacharbeiten zu müssen, wäre es super wenn das Makro immer in dem Bereich, welcher sich ergiebt wenn das Makro die Tabelle nach bestimmten Kriterien filtert, nach leeren Spalten sucht und nicht wie bisher in einem vorher fest definierten Bereich.
Anbei ist mein bisheriges Makro für einen bestimmten Bereich X:
Sub filtern_ausblenden()
'Das Tabellenblatt aktivieren
ThisWorkbook.Worksheets("Aufgaben").Activate
'FilterEinstellungen auf null setzten
ActiveSheet.Range("A12:H425").AutoFilter
Dim rngFilterRange As Range
Dim lngCriteriaCount As Long
Dim arrCriteria() As String
'Anzahl der Kriterien festlegen
lngCriteriaCount = 2
ReDim arrCriteria(0 To lngCriteriaCount - 1)
'Filterkriterien festlegen
arrCriteria(0) = "0"
arrCriteria(1) = "0.*"
Set rngFilterRange = ActiveSheet.Range("A12:H425")
rngFilterRange.AutoFilter Field:=1, _
Criteria1:=arrCriteria(), _
Operator:=xlFilterValues
'Horizontal filtern
Dim rng As Range
Dim n As Integer
'Bereich hier soll immer der Bereich sein, der sich ergiebt wenn Tabelle zuvor nach bestimmten Kriterium gefiltert wurde
Set rng = Range("D12:DC17")
Application.ScreenUpdating = False
If Not blnHidden Then
blnHidden = True
For n = 1 To rng.Rows.Count
If Application.CountA(rng.Rows(n)) = 0 Then rng.Rows(n).Hidden = blnHidden
Next
For n = 1 To rng.Columns.Count
If Application.CountA(rng.Columns(n)) = 0 Then rng.Columns(n).Hidden = blnHidden
Next
Else
blnHidden = False
rng.Rows.Hidden = blnHidden
rng.Columns.Hidden = blnHidden
End If
Application.ScreenUpdating = True
End Sub
Ich hoffe ich habe mich verständlich ausgedrückt und jemand kann mir bei dem Problem helfen.
VG Caffy
|