Openen van het formulier frmSelectieVenster
Deze blog sluit op de 2e blog over selectievensters. Daar bespraken we de code die wordt uitgevoerd wanneer we klikken op een van de buttons btnFiets, btnStuur of btnBanden en het Selectievenster wordt geopend. Nu gaan we bekijken wat er daarna gebeurt.

We vallen met de deur in huis. Je treft onderstaand de code aan waarmee het Formulier frmSelectieVenster wordt geopend.
In de vorige blog stond de volgende opdracht:
‘DoCmd.OpenForm “frmSelectieVenster”, , , strLinkCriteria, , , strArgs’ waarmee het venster frmSelectieVenster werd geopend en in strArgs de argumenten (‘btnFiets, 3,4,5) meekreeg.
De variabele (‘btnFiets, 3,4,5) kunnen we opvragen met de functie Me.OpenArgs en plaatsen in de public variable strPbForm.
Met de functie Instr() zoeken we naar de positie van de komma. We starten op de 1e positie van de variabele ‘btnFiets, 3,4,5 en vinden de plaats van de komma met de formule
instr(1, Me.OpenArgs, ”,”) waarmee de variabele intLengte de waarde 9 krijgt. De komma staat op de 9e positie.
Omdat Me.OpenArgs ook Null kan zijn, beveilig ik een eventuele fout nog met de functie NZ().
intLengte = instr(1, Nz(Me.OpenArgs,””) ”,”).
Nu kunnen we de variabele strPbForm vullen met de eerste 8 posities van de Me.OpenArgs
strPbForm = Nz(Left(Me.OpenArgs, intLengte – 1), 0).
Van de uitkomst strPbForm = ‘btnFiets’ willen we de eerste drie posities niet meenemen. Dat doen we met de functie Mid()
strPbForm = Mid(strPbForm, 4)
De variabele strPbForm is nu gevuld met het woord ‘Fiets’. Deze waarde hebben we nodig bij het ophalen van de waarden uit de tblReferenties.
De items halen we ook op met de functie Mid() op eenzelfde logische manier vanaf de positie 10 (intLengte was 9 + 1)
strItems = Nz(Mid(Me.OpenArgs, intLengte + 1), 0)
De variabele strItems is nu gevuld met ‘3,4,5’. We weten nog dat 1 en 3 staan voor ‘Goed voorwiel’, ‘Goed achterwiel’ en ‘Handrem’.
Het opschrift van het formulier frmSelectieVenster krijgt de waarde van de variabele strPbForm (‘Fiets’) met de opdracht:
Me.lblOpschrift.Caption = strPbForm
De volgende opdracht voert de procedure prcLijstRechts uit. We hebben dit al toegelicht in onze vorige blog. De procedure krijgt het argument 3,4,5 mee met de variabele strItems.
Tenslotte wordt de procedure prcLijstLinks uitgevoerd. Let goed op.
De procedure prcLijstLinks
De procedure begint met een functie. In de vorige blog leerden we dat een functie een waarde teruggeeft. De variabele strItemsRechts wordt gevuld met de waarde die met de functie fncItemsRechts wordt opgehaald.
Het ophalen van de waarden in het rechterlijstje met de functie ‘fncItemsRechts’
Het ophalen van de waarden gaat met een For, Next – lus en wel zo vaak als er waarden in de lijst voorkomen.
Met Me.lstRechter.ListCount wordt het aantal waarden opgehaald uit het rechterlijstje. Deze waren met de vorige opdracht prcLijstRechts gevuld met de waarden 3,4,5. Er zijn met andere woorden dus drie items.
For lngItem = 0 To Me.lstRechter.ListCount – 1
Het eerste item heeft de waarde 0, waardoor de For, Next – lus drie keer rond gaat en lngItem achtereenvolgens 0, 1 en 2 als waarde krijgt. Met deze waarde van lngItem wordt de inhoud van dit item opgehaald met:
strItem = Nz(Me.lstRechter.Column(0, lngItem), 0)
Achtereenvolgens worden in het rechterlijstje de waarden 3, 4 en 5 gevonden.
De gevonden waarde ‘strItem’ wordt met een komma toegevoegd aan de variabele ‘strItems’, tenzij dit het laatste item in de lijst is.
strItems = strItems & strItem
‘ Dan nog komma tussen de namen als het niet het laatste item is
If Not (lngItem = (Me.lstRechter.ListCount – 1)) Then
strItems = strItems & “, “
End If
De functie fncItemsRechts levert dus in ons geval de string ‘3, 4, 5’ op, waarmee de variabele strItemsRechts wordt gevuld.
Met de strSQL variabele gaan we alle waarden ‘ref_id’ en ‘ref_strVerkort’ ophalen uit de tblReferenties met de waarde ‘Fiets’ (strPbForm). Maar als er iets gevuld is in de variabele ‘strItemsRechts’ (If Not strItemsRechts = “”) dan worden deze uitgezonderd door de opdracht ‘AND ref_id NOT IN (” & strItemsRechts & “)”.
Hier staat dus eigenlijk: Haal alle ref_id’s op uit de tblReferenties waar ‘Fiets’ is ingevuld in het veld ‘ref_strTabel’ (dat worden dan ‘1, 2, 3, 4, 5, 6, 7, 8’), maar zonder hiervan uit de waarden ‘3,4 en 5’, omdat die al in het rechterlijstje staan.
Hiermee heeft het venster frmSelectieVenster de hele procedure doorlopen als het geopend wordt en zullen het linker- en het rechterlijstje gevuld zijn.
Keuze van links naar rechts overbrengen
Dat gaan we op 2 manieren doen, nl met de button btnNaarRechts of een dubbelklik op het linkerlijstje. Onderstaande code laat de prcNaarRechts uitvoeren:
Het eerste deel van deze procedure heeft nog wat uitleg nodig. Het begint ermee dat er op de btnNaarRechts is geklikt en er geen selectie is gemaakt. In dat geval is de .listindex gelijk aan -1. Daarna kan het zijn dat alle items al naar de rechterlijst zijn overgebracht en er geen items meer over zijn in de linkerlijst. We ondervangen hiermee dat de procedure dan vastloopt. Als er geen selectie is gemaakt en er zijn nog wel items in de linkerlijst, dan volgt een berichtje in de messagebox.
Met de eerdere uitleg van de functie fncItemsRechts zal het vervolg van de procedure al snel te lezen zijn. In feite worden de rechter items opnieuw opgevraagd en wordt het geselecteerde item uit de linkerlijst met de opdracht Me.lstLinker.Selected(lngItem) eraan toegevoegd.
Keuze van rechts naar links overbrengen
Eveneens doen we dat op twee manieren. Met de btnNaarLinks of een dubbelklik op het rechterlijstje.
Het zal je niet verbazen dat deze procedure vrijwel hetzelfde is als de procedure prcNaarRechts.
Het verschil zijn de opdrachten.
strPlaats = InStr(1, strRechterItems, strItem)
strRechterItems = Left(strRechterItems, strPlaats – 1) & Mid(strRechterItems, strPlaats + intItem + 2)
Eerst wordt de plaats van het gekozen item gezocht in de variabel strRechteritems en vervolgens met de functies Left() en Mid() uit de string gehaald. Na het item worden nog twee posities meegenomen: de komma en de spatie.
Als de srtRechterItems is gewijzigd, worden de beide listboxen opnieuw opgebouwd.
Vervolg
Dit derde blog zit er ook alweer op. Er rest nog 1 laatste blog, waarin wij de resultaten zullen overbrengen naar het formulier frmFietsen eenvoudigweg door op de btnOke te klikken.
Heb je vragen over onze blog? Laat hieronder een opmerking achter.
Neem contact op
Heb je een specifieke vraag of wens, bevindt je je in een knelpunt of wil je simpelweg even brainstormen?
Contact ons vandaag nog op 020 6 254 254 of info@florijn.com