• Privacywetgeving
    Het is bij Helpmij.nl niet toegestaan om persoonsgegevens in een voorbeeld te plaatsen. Alle voorbeelden die persoonsgegevens bevatten zullen zonder opgaaf van reden verwijderd worden. In de vraag zal specifiek vermeld moeten worden dat het om fictieve namen gaat.

Automatische filters

Status
Niet open voor verdere reacties.

Bandito

Gebruiker
Lid geworden
8 okt 2012
Berichten
199
Beste allemaal,

Een tijd geleden ben ik met het bijgevoegde excell begonnen maar heb het laten verstoffen. Nu wil ik het weer oppakken maar loop tegen wat problemen aan.

Zie bijgevoegd excell document.

Wanneer ik in de grijze balk type moeten de gegevens eronder gefilterd worden. Als ik boven documentsoort in de grijze balk "a" of "b" of "c" type werkt dit.

Wanneer ik "d" type crasht het document. Waarschijnlijk omdat er een lege regel tussen "c" en "d" zit.
Ik wil graag dat het mogelijk is dat ik lege regels in mijn document kan opnemen. Is dit mogelijk?

Bij voorbaat dank.
 

Bijlagen

  • Excell.xlsm
    22,1 KB · Weergaven: 38
Gebruik een aaneengesloten bereik zonder lege kolommen en zonder lege rijen. Range("A6").currentregion geeft alleen het bereik A6:A9.
 
Maar ik zou juist de mogelijkheid willen hebben om geen aaneengesloten bereik te gebruiken, is dat mogelijk?
 
Dan zal je het bereik moeten bepalen bv

Code:
Range("A6:K" & Cells(Rows.Count, 1).End(xlUp).Row)
 
Helaas, mijn kennis is minimaal.

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim rGewensteFilters As Range, rFilter As Range
Dim i As Integer, iKolom As Integer
Set rGewensteFilters = Range("A4:K4")                                               'dit zijn de cellen waarmee je bepaalde kolommen wil filteren
Set rFilter = Range("A6:K4" & Cells(Rows.Count, 1).End(xlUp).Row)                                                               'dit is de 1e cel van je gegevens, dus linksboven
If Not Intersect(Target, rGewensteFilters) Is Nothing Then 'heb je net iets veranderd in je gewenste filtervelden ? zoniet stop hier
    iKolom = rGewensteFilters.Columns.Count                                            'uit hoeveel velden bestaat je filter ?
    ActiveSheet.AutoFilterMode = False                                                   'even de ganse filter terug uit zetten
    With rFilter.CurrentRegion                                                              'dit is ons gegevensbereik
        For i = 1 To iKolom                                                                   'voor iedere kolom in je gegevens
            If Not IsEmpty(rFilter.Offset(-2, i - 1)) Then                                       'wil je iets filteren in deze kolom ?
                If IsNumeric(rFilter.Offset(-2, i - 1)) Then                                        'als het een getal is dan
                    .AutoFilter Field:=i, Criteria1:="=" & rFilter.Offset(-2, i - 1).Value 'filter op getal"
                ElseIf IsDate(rFilter.Offset(-2, i - 1)) Then
                    .AutoFilter Field:=i, Operator:=xlFilterValues, Criteria2:=Array(2, Format(rFilter.Offset(-2, i - 1).Value, "mm/dd/yyyy"))
                Else                                                                                'anders
                   [B] .AutoFilter Field:=i, Criteria1:="=" & "*" & rFilter.Offset(-2, i - 1).Value & "*" 'filter op tekst[/B]
                End If
            End If
        Next
    End With
End If
End Sub

De code crasht nu op de dikgedrukte regel
 
hier staat in ieder geval een 4 teveel
Code:
Set rFilter = Range("A6:K[COLOR="#FF0000"]4[/COLOR]" & Cells(Rows.Count, 1).End(xlUp).Row)
 
Die 4 had ik erbij gezet omdat hij crashte ;)

Code:
Set rFilter = Range("A6:K4" & Cells(Rows.Count, 1).End(xlUp).Row)
geeft typen komen niet overheen op de hierboven genoemde dik gedrukte regel
 
Het nut van lege rijen en kolommen ontgaat mij. Het voorbeeldbestand is verdere een beetje te summier om de code te testen dus dat mag je zelf even doen.

Probeer het zo maar eens
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
  If Not Intersect(Target, Range("A4:K4")) Is Nothing Then
    ActiveSheet.AutoFilterMode = False
    For j = 1 To 11
      If Cells(4, j) <> "" Then
        If IsDate(Cells(4, j)) Then
          c00 = Format(Cells(4, j), "mm/dd/yyyy")
         Else
          c00 = IIf(IsNumeric(Cells(4, j)), Cells(4, j), "*" & Cells(4, j) & "*")
        End If
        Range("A6:K" & Cells(Rows.Count, 1).End(xlUp).Row).AutoFilter j, c00
      End If
    Next j
  End If
End Sub
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan