Thema Datum  Von Nutzer Rating
Antwort
06.05.2014 12:02:35 Corina
NotSolved
06.05.2014 18:07:59 Gast40018
NotSolved
06.05.2014 21:05:58 Corina
NotSolved
06.05.2014 22:34:55 Gast40018
NotSolved
06.05.2014 22:41:56 Gast40018
NotSolved
07.05.2014 09:16:31 Corina
NotSolved
Rot Fragen zu Modify Filter
07.05.2014 11:04:57 Gast68435
NotSolved
07.05.2014 14:46:36 Corina
NotSolved
07.05.2014 15:28:59 Gast22596
NotSolved
07.05.2014 16:36:58 Corina
NotSolved
07.05.2014 17:02:26 Gast65946
NotSolved
08.05.2014 08:41:22 Corina
NotSolved
08.05.2014 14:04:56 Gast89195
*****
Solved
08.05.2014 14:34:50 Gast83579
NotSolved
08.05.2014 15:36:16 Corina
NotSolved
08.05.2014 16:41:00 Corina
NotSolved
08.05.2014 17:11:13 Gast1901
NotSolved
08.05.2014 19:16:53 Corina
NotSolved
08.05.2014 20:23:04 Gast31229
NotSolved
09.05.2014 13:36:57 Corina
NotSolved
09.05.2014 14:07:59 Gast21494
NotSolved

Ansicht des Beitrags:
Von:
Gast68435
Datum:
07.05.2014 11:04:57
Views:
925
Rating: Antwort:
  Ja
Thema:
Fragen zu Modify Filter
Public Sub ModifyFilter(Range As Excel.Range, Optional Field, Optional Value)
   
  Dim vnt As Variant
  
  If IsMissing(Field) Or IsEmpty(Field) Or IsNull(Field) Then
  ' remove/disable autofilter
    Call Range.AutoFilter
     
  ElseIf IsMissing(Value) Or IsEmpty(Value) Or IsNull(Value) Then
  ' reset field filter
    Call Range.AutoFilter(Field)
     
  Else
  ' modify field filter
     
    On Error Resume Next
    With Range.Worksheet.AutoFilter.Filters(Field)
      vnt = .Criteria1
      If .Operator = xlOr Then vnt = Array(vnt, .Criteria2)
    End With
    On Error GoTo 0
     
    If Not IsEmpty(vnt) Then
      If IsArray(vnt) Then
        ReDim Preserve vnt(LBound(vnt) To UBound(vnt) + 1)
        vnt(UBound(vnt)) = Value
      Else
        vnt = Array(vnt, Value)
      End If
    Else
      vnt = Array(Value)
    End If
     
    Call Range.AutoFilter(Field, vnt, xlFilterValues)
     
  End If
   
End Sub

Field gibt den Spaltenindex im AutoFilterbereich an, also diejenige Spalte die gefiltert werden soll. Der Index läuft von 1 bis N, wobei N die maximale Spaltenanzahl des Bereichs darstellt (bei A1:D1 wäre N = 4).

Wenn Field nicht angegeben bzw. ungültig ist, wird der AutoFilter (das heißt für den gesamten Bereich) deaktiviert (derzeit wird er eigentlich ehern umgeschaltet, an -> aus bzw. aus -> an).

Value ist der Wert nach dem gefiltert werden soll. In dieser Funktion werden jedoch die Filtereinstellungen nicht überschrieben, sondern ggf. um den Wert von Value erweitert.

Wenn Value nicht angegeben bzw. ungültig ist, wird der Filter für die angegebene Spalte zurückgesetzt.

Im Else-Abschnitt wird zuerst versucht bereits vorhandene Kriterien zu ermitteln (das können maximal 2 an der Zahl sein). Da die hier gezeigte Variante stark Fehleranfällig ist, werden Fehlermeldung kurzeitig unterdrückt. Wenn midestens Kriterium1 gelesen werden konnte, dann hat vnt einen Wert ungleich Empty (siehe VBA-Hilfe zu IsEmpty und Empty) - mit vnt wird zum Schluss der Filter gesetzt. Ist es  Empty, dann wird Value als zu setzender Wert übernommen (hier als Array). Wenn vnt nicht Empty ist, dann mus es in diesem Fall entweder ein Array oder eine Zeichenkette sein. Wenn es ein Array ist, wird dieses um einen Eintrag vergrößert (Preserve sorgt dafür das Daten im Array nicht verworfen werden) und Value an letzter Stelle eingetragen. Wenn es eine Zeichenkette ist, wird aus diese Zeichenkette und dem Value ein Array gebildet (hieraus wird letztendlich eine Filter mit dem Operator xlOr gebildet).

Anhand von Field und vnt wird letztendlich der Filter dann gesetzt.


Ihre Antwort
  • Bitte beschreiben Sie Ihr Problem möglichst ausführlich. (Wichtige Info z.B.: Office Version, Betriebssystem, Wo genau kommen Sie nicht weiter)
  • Bitte helfen Sie ebenfalls wenn Ihnen geholfen werden konnte und markieren Sie Ihre Anfrage als erledigt (Klick auf Häckchen)
  • Bei Crossposting, entsprechende Links auf andere Forenbeiträge beifügen / nachtragen
  • Codeschnipsel am besten über den Code-Button im Text-Editor einfügen
  • Die Angabe der Emailadresse ist freiwillig und wird nur verwendet, um Sie bei Antworten auf Ihren Beitrag zu benachrichtigen
Thema: Name: Email:



  • Bitte beschreiben Sie Ihr Problem möglichst ausführlich. (Wichtige Info z.B.: Office Version, Betriebssystem, Wo genau kommen Sie nicht weiter)
  • Bitte helfen Sie ebenfalls wenn Ihnen geholfen werden konnte und markieren Sie Ihre Anfrage als erledigt (Klick auf Häckchen)
  • Bei Crossposting, entsprechende Links auf andere Forenbeiträge beifügen / nachtragen
  • Codeschnipsel am besten über den Code-Button im Text-Editor einfügen
  • Die Angabe der Emailadresse ist freiwillig und wird nur verwendet, um Sie bei Antworten auf Ihren Beitrag zu benachrichtigen

Thema Datum  Von Nutzer Rating
Antwort
06.05.2014 12:02:35 Corina
NotSolved
06.05.2014 18:07:59 Gast40018
NotSolved
06.05.2014 21:05:58 Corina
NotSolved
06.05.2014 22:34:55 Gast40018
NotSolved
06.05.2014 22:41:56 Gast40018
NotSolved
07.05.2014 09:16:31 Corina
NotSolved
Rot Fragen zu Modify Filter
07.05.2014 11:04:57 Gast68435
NotSolved
07.05.2014 14:46:36 Corina
NotSolved
07.05.2014 15:28:59 Gast22596
NotSolved
07.05.2014 16:36:58 Corina
NotSolved
07.05.2014 17:02:26 Gast65946
NotSolved
08.05.2014 08:41:22 Corina
NotSolved
08.05.2014 14:04:56 Gast89195
*****
Solved
08.05.2014 14:34:50 Gast83579
NotSolved
08.05.2014 15:36:16 Corina
NotSolved
08.05.2014 16:41:00 Corina
NotSolved
08.05.2014 17:11:13 Gast1901
NotSolved
08.05.2014 19:16:53 Corina
NotSolved
08.05.2014 20:23:04 Gast31229
NotSolved
09.05.2014 13:36:57 Corina
NotSolved
09.05.2014 14:07:59 Gast21494
NotSolved