Formulierfilter vast in een form

Status
Niet open voor verdere reacties.
Ik heb ff zitten zwoegen en heb bijna door hoe de filter en opzoek ding werken! :)

een ding alleen.. heb nu 1 zoekveld toegevoegd... maar er werkt iets niet.. als ik meerdere velden invoer dan werkt het veld (SYSKenmerk) niet meer.. :S

wat doe ik vaut! ;)
 

Bijlagen

  • Docreg_v1.78.zip
    47,9 KB · Weergaven: 15
@Harry46

Dit is bijna zoals ik het bedoel ;)

Wil eigenlijk alleen "selectievelden (donkergroen)", dus met pulldown menu, bij de velden 2, 3, 4 en 5. En opzoekvelden (lichtgroen) bij de velden 1 (datum), 6 (onderwerp) en 7 (kenmerk). Dus niet beide bij alles.

Hiernaast moeten de lichtgroene velden op kunnen zoeken zoals de eerdere versie, dus meerdere letters, nu springt hij telkens terug als je een letter typt :)

Kun je dit nog fixen? ;) haha
 
Bedoel je dit!
 

Bijlagen

  • Docreg_v1.7Ha.zip
    41,4 KB · Weergaven: 27
Laatst bewerkt:
We komen er wel... Ziet er netjes uit zo!

Ik heb zelf nog een kleine aanpassing gemaakt:
Code:
    Set ctlCurrentControl = Screen.ActiveControl
    Call fFilterVulin(ctlCurrentControl.Name)
i.p.v.
Call fFilterVulin("f2"
Code:
)
[/CODE]
zodat je de aanroep makkelijker kunt kopiëren. Je kunt dan wat makkelijker elementen toevoegen zonder na te hoeven denken.

En ik zou het aantal C en F variabelen niet in een constante vastleggen, want als je iets toevoegt of verwijdert, dan moet je die waarden ook aanpassen.
Je kunt ze ook zo vinden:

Code:
Private Sub cmdFilterWeg_Click()
[COLOR="Blue"]Dim ctl As Control[/COLOR]
Dim i   As Integer

[COLOR="blue"]    iAantalF = 0
    iAantalC = 0
    For Each ctl In Controls
        If Left(ctl.Name, 1) = "c" And Len(ctl.Name) < 4 Then
            iAantalC = iAantalC + 1
        ElseIf Left(ctl.Name, 1) = "f" And Len(ctl.Name) < 4 Then
            iAantalF = iAantalF + 1
        End If
    Next[/COLOR]    
    sFilterH = ""
    For i = 1 To iAantalF
        Me("f" & i) = ""
    Next i
    For i = 1 To iAantalC
        Me("c" & i) = ""
    Next i
    Me.RecordSource = "select * from inboeken"
    Me.Requery

End Sub
 
Screen.ActiveControl kun je gebruiken, maar waarom dan niet meteen zo:
Call fFilterVulin(Screen.ActiveControl.Name)

De functie fComboRS wordt dan:
Function fComboRS()
If Len(sFilterH) > 0 Then
Me(Screen.ActiveControl.Name).RowSource = "select distinct " & Me(Screen.ActiveControl.Name).Tag & " from inboeken where " & sFilterH
Else
Me(Screen.ActiveControl.Name).RowSource = "select distinct " & Me(Screen.ActiveControl.Name).Tag & " from inboeken"
End If
End Function

Functie aanroepen bij OnEnter van de comboboxen via VBA met:
Call fComboRS
Of in het eigenschappenformulier bij gebeurtenis Enter: = fComboRS()

Opmerking:
Call mag ook weg, staat er alleen voor de duidelijkheid dat er een functie wordt gebruikt.

Constanten:
Om het aantal via een loop door de form-controls te bepalen lijkt mij niet echt zinvol, maar als je dat al wilt, dan alleen bij openen van formulier, en niet bij resetten filter
 
Laatst bewerkt:
Opmerking:
Call mag ook weg, staat er alleen voor de duidelijkheid dat er een functie wordt gebruikt.
Als de functie in een functie module staat, doet-ie het niet zonder Call. Zonder Call werkt de functie alleen op de modulepagina van het formulier zelf.

Constanten:
Om het aantal via een loop door de form-controls te bepalen lijkt mij niet echt zinvol, maar als je dat al wilt, dan alleen bij openen van formulier, en niet bij resetten filter
Ik heb alleen de functie aangepast, niet gekeken of de plek de meest handige was. Het is uiteraard handiger als je hem maar één keer hoeft uit te voeren. Zinvol? Zoals ik al zei, als je een zoekvak wilt omzetten naar een combobox, of andersom, kloppen je constanten niet meer. En dan krijg je fouten bij de uitvoer (als de waarde van de constante groter is). Op deze manier ben je van alle telwerk af. Lijkt mij een toegevoegde waarde... Overigens zou ik in deze constructie wel de namen van de opbjecten aanpassen, en dus niet c1, maar cbo1. Op die manier is de herkenning makkelijker. Voor je het weet heb je ook een cmdKnop te pakken als je op de eerste letter filtert.
 
Laatst bewerkt:
Als de functie in een functie module staat, doet-ie het niet zonder Call. Zonder Call werkt de functie alleen op de modulepagina van het formulier zelf

Volgens mij is dat onjuist!
Een functie kun je altijd zonder Call aanroepen. Je mag dan geen haakjes gebruiken.

Opmerking:
Strikt genomen geeft een functie een waarde retour. Eigenlijk zou gebruik gemaakt moeten worden van een subroutine ipv een functie.
 
Ik heb wel een paar functies die op een moduleblad staan die het niet doen zonder Call. En wèl als ik ze op het formulier zet. Vandaar mijn opmerking. Ik hou mij graag aanbevolen voor verbeteringen, maar het is een eigen constatering...
 
Als de functie in een functie module staat, doet-ie het niet zonder Call. Zonder Call werkt de functie alleen op de modulepagina van het formulier zelf.

Het moet, denk ik, voor jou geen probleem zijn om hiervan een voorbeeldje op het forum te plaatsen
 
@Michel en Harry46,

Ik hoop dat Erik jullie nog kan volgen, maar dat betwijfel ik.
 
'Tis inderdaad een beetje zinloze discussie geworden, ook al omdat het eigenlijk nergens over gaat... En hij heeft ook niet zo veel meer met de topic te maken, dus ik laat het hier er ook absoluut verder bij!
Mocht barrink nog verdere vragen hebben, dan is hij uiteraard welkom!
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan