Meervoudige selectie...HELP!

Status
Niet open voor verdere reacties.
Het filter wordt bij elke keuzelijst leeggemaakt en opnieuw ingesteld, dus dat kan wel kloppen. Mijn voorbeeld doet dat overigens ook. Je kunt eens kijken of deze code werkt. Het gaat om de blauwe regels die je moet toevoegen aan de bestaande procedures bij de keuzelijsten.

Code:
[B][COLOR="#0000CD"]Dim sFilter As String, sFilterOri As String

    sFilterOri = Me.Filter & ""
    sFilter = ""[/COLOR][/B]
    i = 0
    For Each itm In Me.lst1.ItemsSelected
        If Me.lst1.ItemsSelected.Count > 0 Then
            sFilter = sFilter & "(" & Me.lst1.Tag & " = " & Me.lst1.ItemData(itm) & ") "
            i = i + 1
            If i < Me.lst1.ItemsSelected.Count Then sFilter = sFilter & " OR "
        End If
    Next itm
    If sFilter & "" = "" Then
        Me.Filter = ""
        Me.FilterOn = False
    Else
        Me.Filter = sFilter
        Me.FilterOn = True
    End If

[B][COLOR="#0000CD"]    If sFilter & "" = "" And sFilterOri & "" = "" Then
        Me.Filter = ""
        Me.FilterOn = False
    ElseIf sFilter & "" = "" Then
        If Not sFilterOri & "" Then
            Me.Filter = sFilterOri
            Me.FilterOn = True
        End If
    Else
        Me.Filter = sFilterOri & " AND " & sFilter
        Me.FilterOn = True
    End If[/COLOR][/B]

Ik heb 'm niet kunnen testen, want de db crasht steeds als ik het formulier opsla.
 
Ik krijg een syntaxfout....operator ontbreekt....foutopsporing staat dan bij
Me.Filter = sFilterOri & " AND " & sFilter

Je schrijft toevoegen aan, moet ik dat laatste deel ook toevoegen?, of vervangt het het deel vanaf next item?
Op beide manieren krijg ik deze fout.

Ik heb nog een vraag voor het forum, maar ik denk dat ik daar beter een nieuwe vraag van kan maken, zodat het voor anderen ook weer duidelijk is.
b.v.b hartelijk dank!
 
Ik zal in mijn eigen exemplaar kijken wat er aan schort. Zoals ik al zei: op het werk kon ik de code niet testen. U hoort nog van ons!
 
Er zat een kleine denkfout in de code, die er nu uit is. Dus deze code kun je in zijn geheel gebruiken als vervanger van de andere code.
Code:
Dim sFilter1 As String, sFilter2 As String

    sFilter1 = ""
    sFilter2 = ""
    i = 0
    For Each itm In Me.lst1.ItemsSelected
        If Me.lst1.ItemsSelected.Count > 0 Then
            sFilter1 = sFilter1 & "(" & Me.lst1.Tag & " = " & Me.lst1.ItemData(itm) & ") "
            i = i + 1
            If i < Me.lst1.ItemsSelected.Count Then sFilter1 = sFilter1 & " OR "
        End If
    Next itm

    i = 0
    For Each itm In Me.lst2.ItemsSelected
        If Me.lst2.ItemsSelected.Count > 0 Then
            sFilter2 = sFilter2 & "(" & Me.lst2.Tag & " = '" & Me.lst2.ItemData(itm) & "') "
            i = i + 1
            If i < Me.lst2.ItemsSelected.Count Then sFilter2 = sFilter2 & " OR "
        End If
    Next itm
    
    If sFilter1 & "" = "" And sFilter2 & "" = "" Then
        Me.Filter = ""
        Me.FilterOn = False
    ElseIf sFilter1 & "" = "" And Not sFilter2 & "" = "" Then
        If Not sFilter2 & "" = "" Then
            Me.Filter = sFilter2
            Me.FilterOn = True
        End If
    ElseIf Not sFilter1 & "" = "" And sFilter2 & "" = "" Then
        Me.Filter = sFilter1
        Me.FilterOn = True
    Else
        Me.Filter = sFilter1 & " AND " & sFilter2
        Me.FilterOn = True
    End If
Ze zijn identiek voor de beide keuzelijsten; elke keuzelijst wordt namelijk in zijn geheel bekeken. Dus alle bestaande code tussen de Sub.. en End Sub kan weg, en deze code ervoor in de plaats.
 
Beste Michel,

Klopt het dat de filters te opzichte van elkaar als OF werken?
Als in nu in lijst 1 voor het jaar 2012 selecteert, en in lijst 2 voor soort3 dan krijg ik zowel een record te zien van het jaar 2012 met soort3 en van het jaar 2009 met soort3
Het record van jaar 2009 zou er niet moeten zijn.

Ik begin overigens gewoon een hekel aan mijzelf te krijgen met al die vervelende vragen :eek:
 
Dat zou niet moeten, de soorten (en jaren) zijn op zichzelf met OR samengesteld (logisch, een record kan maar in één jaar zitten) maar de samenstelsels van Filter1 en Filter2 zijn met AND gekoppeld. Dus beide voorwaarden van beide filtercombinaties moeten waar zijn. Als ik de filtering Soort3 en 2012 kies, komt er netjes één record uit rollen.
 
Dat is gek?
Ik start op, kies bij jaar voor 2012, en bij soort eerst voor soort1
Vervolgens selecteer ik ook soort3
Vervolgens krijg ik 5 records te zien.
4 met het jaar 2012
En 1 met het jaar 2009

Bekijk bijlage filtervoorbeeld.rar
 
Je zult het filter dan heel anders op moeten bouwen. Om te beginnen: bedenk welke combinaties je toe wilt laten. Op dit moment kun je in beide keuzelijsten meer dan één keuze maken. Aangezien één item nooit in twee categorieën kan zitten, moet je dan al automatisch een OF variant gebruiken. In combinatie met twee keuzelijsten, levert dat een blijkbaar ongewenste combinaties op. Je vraagt in bovengemeld voorbeeld het volgende: 2012 EN (Soort1 OF Soort3). Wat wil je dan als vraag? Waarschijnlijk (2012 EN Soort1) OF (2012 EN Soort3).
En dat kan wel, maar dan moet je het filter dus heel anders opbouwen. Om te beginnen: er mag dan nog maar één jaar gekozen worden, want anders krijg je wel heel ingewikkelde combinaties.
 
Oke, ik begrijp het.
Zoals het nu is gaat het prima als ik maar 1 lijst op deze manier gebruik.
Dat was ook de bedoeling in het begin, 1 lijst waaruit ik meerdere waardes kon kiezen.
Heel hartelijk dank voor al je info!:thumb:
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan