AW: Zeilen ausblenden mit VBA
01.10.2007 01:03:24
fcs
Hallo Thomas,
da gibt es Probleme mit dem Selektion-Objekt, wenn du von der Change-Box aus das Setzen des Autofilters versuchst. Vor dem Setzen der Filter in der Tabelle darf die Kombibox nicht mehr das Objekt mit dem Fokus sein. Konsequenter Weise sollte man komplett mit Objekten arbeiten.
Folgende Anpassung, die zunächst eine beliebige Zelle in der Tabelle selektiert, funktioniert.
Als Vereinfachung der Filterdefinition solltest du eine Select Case -Anweisung verwenden. Auch eine Fehlerbehandlung ist hilfreich, wenn man bei Fehlern das Makro kontrolliert verlassen möchte ohne dass direkt der VBA-Editor angezeigt wird.
Nachfolgend beide Varianten. Den Namen der Combobox muss du ggf. noch anpassen.
Gruß
Franz
Private Sub ComboBox1_Change()
Range("D1").Select
Call Filtern
End Sub
Sub Filtern()
Dim wks As Worksheet
Application.ScreenUpdating = False
Set wks = ActiveSheet
With wks.AutoFilter.Range
.AutoFilter field:=5, Criteria1:=ComboBox1.Value, VisibleDropDown:=False
.AutoFilter field:=1, VisibleDropDown:=False
.AutoFilter field:=2, VisibleDropDown:=False
.AutoFilter field:=3, VisibleDropDown:=False
.AutoFilter field:=4, VisibleDropDown:=False
.AutoFilter field:=6, VisibleDropDown:=False
.AutoFilter field:=7, VisibleDropDown:=False
.AutoFilter field:=8, VisibleDropDown:=False
.AutoFilter field:=9, VisibleDropDown:=False
.AutoFilter field:=10, VisibleDropDown:=False
.AutoFilter field:=11, VisibleDropDown:=False
.AutoFilter field:=12, VisibleDropDown:=False
.AutoFilter field:=13, VisibleDropDown:=False
.AutoFilter field:=14, VisibleDropDown:=False
End With
Application.ScreenUpdating = True
End Sub
Sub Filtern2()
Dim wks As Worksheet, iI%
Application.ScreenUpdating = False
On Error GoTo Fehler
Set wks = ActiveSheet
With wks.AutoFilter.Range
For iI = 1 To wks.AutoFilter.Filters.Count
Select Case iI
Case 1 To 4, 6 To 14
.AutoFilter field:=iI, VisibleDropDown:=False
Case 5
.AutoFilter field:=iI, Criteria1:=ComboBox1.Value, VisibleDropDown:=False
Case Else
'do nothing
End Select
Next
End With
GoTo Beenden
Fehler:
MsgBox "Fehler Nr. : " & Err.Number & " ist aufgetreten!" & vbLf & Err.Description
Beenden:
Application.ScreenUpdating = True
Set wks = Nothing
End Sub