Hallo eenieder. Dit is de laatste blog over selectievensters. Ik hoop dat je na mijn blogserie een stuk wijzer geworden bent. En zo niet, mag je altijd een comment achterlaten onderaan de pagina, waarop ik zo snel mogelijk reageer.
In de vorige blog liet ik je de codes in het Selectievenster zien waarmee je keuze van links naar rechts of andersom werd verplaatst.

Nu de keuzes zijn gemaakt, zullen we het hoofdvenster frmFietsen moeten vullen.
Lets begin!
We beginnen met vullen door op de knop btnOke te klikken.
De onderstaande code wordt dan uitgevoerd.
Omdat we het formulier ‘frmFietsen’ een aantal keren in deze procedure gaan gebruiken, zet ik de waarde “frmFietsen” in de variabele strForm. Daarna worden de rechteritems opgehaald met de bekende functie frmItemsRechts.
De variabele strVeld vullen we met de eerste zeven letters van de tabel tblFietsen en de string uit de public variabele strPbForm, die we bij het openen van het formulier frmSelectieVenster de waarde ‘Fiets’ hebben toegekend.
Ik laat de declaratie van de strPbForm nog maar even zien.
Deze public variabele is nog steeds gevuld. Als alle procedures in de module Form_frmSelectieVenster zijn doorlopen, verliest het pas de inhoud.
Nu vullen we zoals gezegd de variabele met de inhoud van strPbForm en laten we die waarde voorafgaan van de string ’fts_str’, waarmee strVeld de inhoud ‘fts_strFiets’ krijgt.
Tussen With en End With vullen we de opdrachten die betrekking hebben op het formulier, waarmee we voorkomen dat we steeds deze opdrachten vooraf moeten laten gaan met Forms(strForm). Bovendien belasten we ons programma iets minder.
In het frmFietsen, wat we hierna gaan bespreken, staat een control (ook wel besturingselement) met de naam fts_strFiets. Dit control heeft de eigenschap Recordsource (Besturingselementbron) en haalt de waarde uit het veld van de tblFietsen. Deze waarde plaatsten we in het veld met de functie fncItemsRechts – zie onze vorige blog. We zullen de inhoud van het veld daarna moeten verversen (.requery).
Tenslotte hebben we in het frmFietsen nog een procedure prcToonList en laten we het venster frmFietsen verversen met de opdracht .refresh. De procedure prcToonList bespreken we hierna.
Met de laatste opdracht DoCmd.Close acForm, Me.Name sluiten we het formulier frmSelectievenster en komt het hoofdformulier frmFietsen weer tevoorschijn.
De knop btnAnnuleren
Het sluiten van het formulier doen we ook met de btnAnnuleren. Het heeft de eenvoudige opdracht om het formulier te sluiten zonder dat er iets gebeurt.
Terug naar de code achter het hoofdvenster frmFietsen

Met het openen van het formulier worden er meteen twee procedures doorlopen.

Voor ons is de procedure Form_current van belang, die we krijgen als we onder de eigenschappen van het formulier in de ontwerpweergave, voor de gebeurtenis ‘Bij aanwijzen’ kiezen.
Elke keer als we het formulier frmFietsen kiezen wordt de procedure Form_current uitgevoerd, die vervolgens onze procedure prcToonList aanroept. Hiermee worden de gemaakte keuzes in de drie listControls lstFiets, lstStuur en lstBanden getoond door drie maal de procedure prcToonListst te doorlopen met de argumenten ‘Fiets’, ‘Stuur’ en ‘Banden’
Zoals je misschien al gemerkt heb, heb ik in het formulier de keuzes aangepast en ook de velden fts_strFiets, fts_strStuur en fts_strBanden zichtbaar gemaakt. Je weet inmiddels dat de waarden overeenkomen met het ref_id in de tabel tblReferenties. Deze waarden zullen als een SQL-string in de eigenschap RowSource van de lstConstrols terecht moeten komen. We zullen de prcToonLists even volgen om te zien hoe dat gebeurt.
De procedure wordt de eerste keer aangeroepen met het argument ‘Fiets’ in de variabele strListControl. Onder het ‘With me’ zie je dat strVeld de waarde ‘fts_strFiets’ krijgt, die gelijk is aan het veld in de tabel ‘tblFietsen’.

Nu gaan we na of het veld fts_strFiets een waarde bevat. Dat kan natuurlijk NULL en dan wordt het met de nz-functie “” of al niets “” zijn. Als dat het geval is, wordt de string strSQL ook “”.
In het andere geval wordt er een SQL-string opgebouwd. Hoe die string eruit gaat zien kun je eenvoudig zien in het venster ‘Direct’. Als je nog niet eerder dit ‘programmeervenster’ het gebruikt, dan kun je die als volgt tevoorschijn halen. Kies in de opdrachtbalk van het vba-venster voor Beeld, en Venster Direct of de toetscombinatie Ctrl+G.
Door nu in de code na End if de opdracht Debug.print strSQL mee te geven, zie je in het venster Direct (hoe de string strSQL eruit ziet.

Uiteraard is de Debug.print code later overbodig en kun je die verwijderen of met een voorafgaande apostrof buiten werking stellen. Als programmeur zul je veel van deze opdracht gebruik maken.
Tenslotte moeten we de sqlstring nog toewijzen aan de drie listControls. Dat doen we met de SELECT-functie. Eigenlijk spreek die voor zich. Afhankelijk van de waarde van het argument strListControl (bijvoorbeeld ‘Fiets’) krijgt de eigenschap Recordsource (Besturingselentbron) van het lstControl (nu dan ‘lstFiets’) de inhoud van de strSQL toegewezen (dus ‘SELECT ref_id, ref_strVerkort FROM tblReferenties WHERE ref_strTabel = ‘Fiets’ AND ref_ID In (8, 4, 5) ORDER BY ref_strVerkort;’).
Tenslotte heb ik nog een foutondervanging toegevoegd met de namen prc_err en prc_exit. Als je die nagaat zul je de wellicht overbodige opdracht Resume na Resume prc_exit zien staan. Ik gebruik deze als de fout in de msgbox is getoond en de code in de onderbrekingsfase staat. De gele lijn kun je dan verschuiven naar Resume om dan stap-voor-stap na te gaan wat er aan de hand is.
Afsluiting
Dit was het vierde blog en daarmee zit het erop. Als je iedere oefening netjes hebt meegelopen zul je een stuk wijzer geworden zijn. Ik hoop dat ik je hiermee inzicht in de manier van Vba-programmeren in Access heb gegeven en wellicht kun je de Selectievensters in je eigen applicaties toepassen. In dat geval zou ik het super vinden als je mij hieronder kort een bericht zou willen sturen!
De eerder beloofde voorbeeld-database kun je nu ontvangen. Mail naar marketing@florijn.com om de download-link te ontvangen.
Mocht je nog steeds vragen hebben over het maken van selectievensters; 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.