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
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
Rot Fragen zu Modify Filter
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:
Gast89195
Datum:
08.05.2014 14:04:56
Views:
884
Rating: Antwort:
 Nein
Thema:
Fragen zu Modify Filter

Ich hab den Code inzwischen schon weiter angepasst.

Debuggst du wenn der Fehler auftritt oder bleibt er bei dir einfach nur dort stecken nachdem du auf eines der Shapes geklickt hast?

Du scheinst 2010 zu haben? Ich werds dann mal bei mir testen (derzeit teste ich in 2007).

 

Erstell für nachfolgenden Code ein eigenes Modul und gibt ihm dann den angegebenen Namen (oder gib ihn einen Namen der Wahl, hauptsache er ist etwas aussagefähig). Entferne das "alte" ModifyFilter aus dem Projekt.

'Modul: mdlCommon
Option Explicit

Public Enum ModifyAction
  mdaAdd
  mdaRemove
End Enum

Public Sub ModifyFilter( _
    Range As Excel.Range, _
    Optional Field, Optional Value, _
    Optional Action As ModifyAction = mdaAdd _
)
  If Range Is Nothing _
    Then Exit Sub
  
  Dim blnField As Boolean
  Dim blnValue As Boolean
  
  blnField = Not (IsMissing(Field) Or IsEmpty(Field) Or IsNull(Field))
  blnValue = Not (IsMissing(Value) Or IsEmpty(Value) Or IsNull(Value))
  
  If Not blnField Then
  ' remove autofilter
    If Range.Worksheet.AutoFilterMode _
      Then Call Range.AutoFilter
    Exit Sub
  ElseIf blnField And Not blnValue Then
  ' remove field filters
    Call Range.AutoFilter(Field)
    Exit Sub
  End If
  
  Dim vntFilters As Variant
  
  On Error Resume Next
  With Range.Worksheet.AutoFilter.Filters(Field)
    vntFilters = .Criteria1
    If .Operator = xlOr _
      Then vntFilters = Array(vntFilters, .Criteria2)
  End With
  On Error GoTo 0
  
  Select Case Action
    Case mdaRemove
      Call RemoveElementFromArray1D(Value, vntFilters)
    Case Else 'mdaAdd
      Call AddElementToArray1D(Value, vntFilters)
  End Select
  
  'still filters available?
  If LBound(vntFilters) <= UBound(vntFilters) Then
  ' set field filters
    Call Range.AutoFilter(Field, vntFilters, xlFilterValues)
  Else
  ' remove field filters
    Call Range.AutoFilter(Field)
  End If
  
End Sub

Private Sub AddElementToArray1D(Expression As Variant, ByRef Array1D As Variant)
  If IsArray(Array1D) Then
    ReDim Preserve Array1D(LBound(Array1D) To UBound(Array1D) + 1)
    Array1D(UBound(Array1D)) = Expression
  ElseIf Not (IsEmpty(Array1D) Or IsNull(Array1D)) Then
    Array1D = Array(Array1D, Expression)
  Else
    Array1D = Array(Expression)
  End If
End Sub

Private Sub RemoveElementFromArray1D( _
    Expression As Variant, _
    ByRef Array1D As Variant, _
    Optional Count As Long _
)
  Dim i&, n&
  
  If IsEmpty(Array1D) Or IsNull(Array1D) Then
    Array1D = Split(Empty)
    
  ElseIf Not IsArray(Array1D) Then
    
    If InStr(1, Array1D, Expression, vbTextCompare) Then
      Array1D = Split(Empty)
    Else
      Array1D = Array(Array1D)
    End If
    
  Else
    
    i = LBound(Array1D)
    
    Do While i <= UBound(Array1D)
      If InStr(1, Array1D(i), Expression, vbTextCompare) Then
        If Count <= 0 Or n < Count _
          Then n = n + 1
      ElseIf n > 0 Then
        Array1D(i - n) = Array1D(i) 'shift element up
      End If
      i = i + 1 'next element
    Loop
    
    If n > 0 Then
      If LBound(Array1D) <= UBound(Array1D) - n Then
        ReDim Preserve Array1D(LBound(Array1D) To UBound(Array1D) - n)
      Else
        Array1D = Split(Empty)
      End If
    End If
    
  End If
  
End Sub

 

In Modul 5 gilt es dann noch eine kleine Anpassung zu erledigen.

  Else 'Unfilter
    
    Select Case strShapeText
      Case "Internal", "External", "Combination"
        Call ModifyFilter(rngAutoFilter, 4, strShapeText, mdaRemove)
        
      Case "Financial", "Infrastructure", "Reputational", "Market"
        Call ModifyFilter(rngAutoFilter, 6, strShapeText, mdaRemove)
        
      Case "Strategic", "Project-related", "Operational"
        Call ModifyFilter(rngAutoFilter, 11, strShapeText, mdaRemove)
        
      Case Else
        Call MsgBox("Please pick a specific risk cause driver, a risk event or the effect level!")
        
    End Select
    
  End If

Damit es dann bei mir. Filter werden bei Klick um den Text des Shapes erweitert und bei erneutem Klick wird der Text wieder entfernt und alle anderen Filter beibehalten.

 

Gruß


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
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
Rot Fragen zu Modify Filter
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