Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

Filter sperren
#1
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.


Angehängte Dateien
.xlsx   Testdatei_Filter.xlsx (Größe: 9,22 KB / Downloads: 6)
Antworten Top
#2
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
Antworten Top
#3
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.
Cadmus
Antworten Top
#4
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
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. 
Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)
Antworten Top
#5
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.
Antworten Top
#6
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
Antworten Top
#7
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
Antworten Top
#8
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
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste