Clever-Excel-Forum

Normale Version: Filter sperren
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hallo,

ich habe ein Filterproblem meiner Excel Datei. 

Ich möchte eine Datei verschicken und in der Tabelle bereits Filter setzen. Nun soll der Nutzer allerdings bei einer Spalte die Möglichkeit haben zu filtern.
Wenn ich mit einem Blattschutz arbeite, sperrt er mir aber immer die gesamte Zeile - also alle Filter. Und das obwohl ich die Zelle richtig formatiert habe und nicht gesperrt habe.

An meinem konkreten Beispiel:

Arbeitsblatt mit dem Namen 'Tabelle1'
ABCDE
1ArtikelLagerungEinkäuferEKVK
2EisTKHr. Meier2,00 €5,00 €
3PizzaTKHr. Mann1,00 €4,00 €
4KuchenRegalFr. Schulz3,00 €6,00 €
5KekseRegalHr. Seppel1,50 €7,00 €
6Kuchen 2RegalFr. Schulz2,50 €6,70 €
Verwendete Systemkomponenten: [Windows (32-bit) NT 10.00] MS Excel 2016
Diese Tabelle wurde mit Tab2Html (v2.6.0) erstellt. ©Gerd alias Bamberg

Die Lagerung (Spalte B) soll bereits auf "Regal" vorgefiltert sein. Diese Filterung soll von keinem Nutzer aufgelöst werden.
Allerdings soll der Nutzer in der Spalte C nach dem Namen der Einkäufer filtern können. 
Die Spalten A, D, E sollen ebenfalls nicht mit dem Filter genutzt werden können.

Die Testdatei ist anbei.

Könnt ihr mir ungefähr folgen? Smile

Danke für eure Hilfe.
Hallo Flynn,

beim Blattschutz hakst Du die Option Autofilter verwenden an.
Aber davor blendest Du mit folgendem Makro die unerwünschten Filterdropdowns aus:

Code:
Sub aaa()
  Dim i As Long, lngSpalte As Long
  lngSpalte = 3 'Spalte des AF, die einzig filterbar bleiben soll
  With ActiveSheet.AutoFilter
    For i = 1 To .Filters.Count
      If .Filters(i).On Then
        If .Filters(i).Count = 2 Then
          .Range.AutoFilter field:=i, Criteria1:=.Filters(i).Criteria1, Operator:=.Filters(i).Operator, Criteria2:=.Filters(i).Criteria2, visibledropdown:=i = lngSpalte
        Else
          .Range.AutoFilter field:=i, Criteria1:=.Filters(i).Criteria1, visibledropdown:=i = lngSpalte
        End If
      Else
        .Range.AutoFilter field:=i, visibledropdown:=i = lngSpalte
      End If
    Next i
  End With
End Sub
Dieses Makro kann ja in einer anderen Datei stehen, z.B. in der persönlchen Makroarbeitsmappe.

Gruß Uwe
Hallo,
wenn ich nicht möchte, dass Daten eingesehen werden, stelle ich sie auch nicht zur Verfügung.

Ich würde die relevanten Daten in eine neue Datei filtern. Mit einem aktuellerem Office als 2010 wäre das mit Power Query mit ein paar Klicks erledigt.
Moin!
Wobei dazu ja nun kein PQ notwendig ist.
Ich filtere Spalte B wie gewünscht …
und kopiere alle Zellen in eine neue Datei.
Excel kopiert nämlich nur die sichtbaren Zellen.

Um nun nur einen Filterdropdown zur Verfügung zu haben …
markiere ich Spalte C in der ungefilterten neuen Tabelle und wähle Daten → Filtern

Gruß Ralf
Danke schön für den Makro - das probiere ich gleich mal aus.

Ich möchte zu einem späteren Zeitpunkt die Informationen wieder einblenden, daher kann ich die Daten auch nicht rauskopieren. Das ist ja jetzt eine vereinfachte Darstellung Smile

Danke - ich melde mich bei Problemen einfach noch mal.
Hi,

(16.01.2021, 09:56)braesig schrieb: [ -> ]Danke schön für den Makro - das probiere ich gleich mal aus.

nimm dann besser folgendes Makro:

Code:
Sub aac()
  'Kuwer 20210116
  Dim i As Long, lngSpalte As Long
  lngSpalte = 3 'Spalte des AF, die einzig filterbar bleiben soll
  With ActiveSheet.AutoFilter
    For i = 1 To .Filters.Count
      'lngSpalte = i 'so werden alle DropDowns wieder eingeblendet, wenn aktiviert
      If .Filters(i).On Then
        Select Case .Filters(i).Count
          Case 0
            'hier wäre der Ort für ein Datumsarray, das aber nicht gelesen werden kann
            '.Range.AutoFilter Field:=i, _
                           Operator:=.Filters(i).Operator, _
                          Criteria2:=.Filters(i).Criteria2, _
                    VisibleDropDown:=i = lngSpalte
          Case 1
            .Range.AutoFilter Field:=i, _
                          Criteria1:=.Filters(i).Criteria1, _
                    VisibleDropDown:=i = lngSpalte
          Case 2
            .Range.AutoFilter Field:=i, _
                          Criteria1:=.Filters(i).Criteria1, _
                           Operator:=.Filters(i).Operator, _
                          Criteria2:=.Filters(i).Criteria2, _
                    VisibleDropDown:=i = lngSpalte
          Case Else
            .Range.AutoFilter Field:=i, _
                          Criteria1:=.Filters(i).Criteria1, _
                           Operator:=.Filters(i).Operator, _
                    VisibleDropDown:=i = lngSpalte
        End Select
      Else
        .Range.AutoFilter Field:=i, _
                VisibleDropDown:=i = lngSpalte
      End If
    Next i
  End With
End Sub

Gruß Uwe
Hallo,

danke @Uwe das hat schon mal super geklappt. 

Wie muss ich den Code ändern, damit ich noch eine zweite Spalte bzw. einen zweiten Filter einblende. 

Kann ich in Spalte 4 noch eine Spalte hinzufügen? Mit Leerzeichen, Komma und Semikolon bin ich nicht weitergekommen.

Code:
Sub aac()
  'Kuwer 20210116
  Dim i As Long, lngSpalte As Long
  lngSpalte = 3 'Spalte des AF, die einzig filterbar bleiben soll
  With ActiveSheet.AutoFilter
    For i = 1 To .Filters.Count
      'lngSpalte = i 'so werden alle DropDowns wieder eingeblendet, wenn aktiviert
      If .Filters(i).On Then
        Select Case .Filters(i).Count
          Case 0
            'hier wäre der Ort für ein Datumsarray, das aber nicht gelesen werden kann
            '.Range.AutoFilter Field:=i, _
                           Operator:=.Filters(i).Operator, _
                          Criteria2:=.Filters(i).Criteria2, _
                    VisibleDropDown:=i = lngSpalte
          Case 1
            .Range.AutoFilter Field:=i, _
                          Criteria1:=.Filters(i).Criteria1, _
                    VisibleDropDown:=i = lngSpalte
          Case 2
            .Range.AutoFilter Field:=i, _
                          Criteria1:=.Filters(i).Criteria1, _
                           Operator:=.Filters(i).Operator, _
                          Criteria2:=.Filters(i).Criteria2, _
                    VisibleDropDown:=i = lngSpalte
          Case Else
            .Range.AutoFilter Field:=i, _
                          Criteria1:=.Filters(i).Criteria1, _
                           Operator:=.Filters(i).Operator, _
                    VisibleDropDown:=i = lngSpalte
        End Select
      Else
        .Range.AutoFilter Field:=i, _
                VisibleDropDown:=i = lngSpalte
      End If
    Next i
  End With
End Sub

Danke
Hallo,

für eine oder mehrere Spalte(n):

Code:
Sub aad()
  'Kuwer 20210118
  Dim i As Long, varSpalten() As Variant
  varSpalten = Array(3, 4) 'Spalten des AF, die filterbar bleiben sollen
  With ActiveSheet.AutoFilter
    For i = 1 To .Filters.Count
      'varSpalten = Array(i) 'so werden alle DropDowns wieder eingeblendet, wenn aktiviert
      If .Filters(i).On Then
        Select Case .Filters(i).Count
          Case 0
            'hier wäre der Ort für ein Datumsarray, das aber nicht gelesen werden kann
            '.Range.AutoFilter Field:=i, _
                          Operator:=.Filters(i).Operator, _
                          Criteria2:=.Filters(i).Criteria2, _
                    VisibleDropDown:=InStr(1, Join(varSpalten) & " ", i & " ")
          Case 1
            .Range.AutoFilter Field:=i, _
                          Criteria1:=.Filters(i).Criteria1, _
                    VisibleDropDown:=InStr(1, Join(varSpalten) & " ", i & " ")
          Case 2
            .Range.AutoFilter Field:=i, _
                          Criteria1:=.Filters(i).Criteria1, _
                          Operator:=.Filters(i).Operator, _
                          Criteria2:=.Filters(i).Criteria2, _
                    VisibleDropDown:=InStr(1, Join(varSpalten) & " ", i & " ")
          Case Else
            .Range.AutoFilter Field:=i, _
                          Criteria1:=.Filters(i).Criteria1, _
                          Operator:=.Filters(i).Operator, _
                    VisibleDropDown:=InStr(1, Join(varSpalten) & " ", i & " ")
        End Select
      Else
        .Range.AutoFilter Field:=i, _
                VisibleDropDown:=InStr(1, Join(varSpalten) & " ", i & " ")
      End If
    Next i
  End With
End Sub

Gruß Uwe