• 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.

VBA (random) uitdaging.

Status
Niet open voor verdere reacties.
Zonder meteen een hele applicatie voor je te bouwen.
In de bijlage een voorbeeld

- hoe je random vragen genereert uit een set van 26 * 30 vragen met behulp van een userform
- hoe je geen naam hoeft te vragen als je gebruik maakt van de eigenschappen van Excel of Windows
- hoe je met een herstructurering van vragen en antwoorden en wegingsfactoren in werkblad 'antwoorden' veel eenvoudiger kunt werken
- hoe je met hetzelfde userform de gebruiker alle vragen 1 voor 1 kunt voorleggen
- en je dus werkblad 'vragen' kunt verwijderen
- hoe je het werkboek het beste kunt verbergen en ontoegankelijk voor de gebruiker kunt maken.

Keer terug naar Excel door op het kruisje in de rechterbovenhoek van het userform te klikken.
 

Bijlagen

Laatst bewerkt:
Beste snb,

Wat ik te zien krijg is indrukwekkend, voor mij.
Je geeft, terecht denk ik, aan dat je niet meteen een hele applicatie bouwt maar wat je hier doet is voormij nog onbegrijpelijk.

Als ik de vragen genereer, kan ik in het venster eronder zelf intypen wat ik wil. Als ik dat doe en alle vragen doorloop dan komt er na de laatste vraag een foutmelding "fout 9 tijdens uitvoering - het subscript valt buiten bereik" en het volgende stuk wordt geel in vba: " titel1.Caption = Split(Join(Filter(Split(titel1.Tag, vbCr), Trim(Split(raam2.Tag, "|")(Val(knop_vervolg.Tag))) & "_"), ""), "|")(1) " Ik heb bij help gekeken en hier heeft men het over een matrix onderdeel wat niet bestaat? Hier vind ik niets van terug in het vba bestand.

Het zelf invullen van antwoorden was niet de bedoeling omdat dit door excel niet te controleren is, van daar de validatielijst met keuze antwoorden. Als je hier al iets van in het vba gedeelte hebt gezet kan je me dan aangeven waar ik zou moeten zoeken om het werkend te krijgen?

Ik weet niet of ik hier uit ga komen maar ik weet wel dat ik het weekend (na het werk) besteed aan F1 en helpmij.nl om te kijken of ik hier enigsinds wijs uit kan worden. In iedergeval bedankt voor de voorzet en het werk.

Groet,
 
Begrijp ik je goed dat je er een meerkeuze antwoord systeem van wil maken ?
 
Klopt, het gaat om een bestand voor een EHBO vereniging waar vrijwilligers cursisten EHBO bij brengen.

-Het een aantal onderwerpen, in het voorbeeld bestand waren het er 26 wat het maximum aan onderwerpen is, minder kan ook.
-Het maximum aan vragen zal zo'n 30 zijn, maar ook hier kunnen het er weer minder zijn.

De bedoeling is dat er een x aantal vragen gekozen kan worden en dan 1 of meerdere onderwerpen en dit in willekeurige volgorde weergegeven wordt.
De antwoorden inderdaad volgens een meerkeuze validatielijst, Of dit nu een random is uitde gekozen vragen met de misleidende antwoorden of er per vraag een aantal misleidende antwoorden verzonnen moeten worden maakt niet zoveel uit hoewel het laaste een lichtelijke voorkeur heeft. In het originele bestand had ik bedacht dat het wel erg moeilijk zou worden om ook de antwoorden in een willekeurige volgorde weer te geven laat staan met nog (soms) een misleidend antwoord (als mogelijk is: soms meerdere misleidende antwoorden) erbij en een validatie lijst waar de gekozen antwoorden af vallen, maar dat had Rudi snel voor elkaar :thumb:

Aan het eind van de vragen lijst moet er een rapportage komen die het aantal goed/fout/onbeantwoord aangeeft met een cijfer gebaseerd op een weging van de vragen, het gewicht van de vragen staat op het blad antwoorden achter de vragen en antwoorden. Hier onder de fout of niet beantwoorde vragen met het foute antwoord en het juiste antwoord, printbaar zodat het meegegeven kan worden.

In het bestand van #38 klopt het aardig, de vragen de antwoorden en de rapportage op het automatisch aanpassen van de rijhoogte na en dit was nodig om de vragen volledig goed weer te kunnen geven. Ik heb nu gezien dat met het formulier wat jij had toegevoegd met de vragen een hele mooie oplossing is, maar is boven staande realiseerbaar? De vragen random heb ik gezien , maar waar dat in het VBA gedeelte gebeurd is me een raadsel . . .
 
In een userform hebben we geen validatielijst(gelukkig maar) en kan het veel fraaier worden opgelost dan in een werkblad.
Zie de bijlage.
Misleidende antwoorden zijn pas misleidend afhankelijk van de gestelde vraag. Je zult dus per vraag een aantal misleidende antwoorden moeten bedenken.
Van dat principe wordt al gebruik gemaakt in de bijlage bij deze post.

Zoals je ziet wordt alles afgehandeld met code in het userform.
Zoek daar op de term 'randomize' en 'rnd' en je ziet waar de willekeurige selectie plaatsvindt.
Ik denk wel dat je even tijd moet nemen om het principe te begrijpen hoe met deze code een bepaald aantal unieke elementen willekeurig uit de totale set getrokken worden.
Doe het gewoon stap voor stap met F8.

Het probleem van de rijhoogte is met de introductie van het userform opgelost.
 

Bijlagen

Laatst bewerkt:
Beste snb,

Ziet er zeer indrukwekkend uit, ik ga hier morgen avond mee aan de slag ( moet morgen werken ).

Wat mij in tweede instantie opvalt: Als ik alle vragen doorlopen heb geeft hij nog "fout 9 tijdens uitvoering - het subscript valt buiten bereik" en het volgende stuk wordt geel in vba: " titel1.Caption = Split(Join(Filter(Split(titel1.Tag, vbCr), Trim(Split(raam2.Tag, "|")(Val(knop_vervolg.Tag))) & "_"), ""), "|")(1) " ( office 2007 )

Alle antwoorden staan in de volgorde op de lijst zoals ze in het tabblad antwoorden staan, dat is op zich niet erg want dan zou het juiste antwoord op verschillende plekken kunnen staan. Nou weet ik niet of, en zo ja, hoe ( en waar) de antwoorden worden weggeschreven, als dat met cijfers is dan zou ik een hulpkolom kunnen aanmaken en achter elke vraag het getal te zetten welk antwoord het juiste is, 1,2,3,4 of 5 om uiteindelijk een raport te genereren - of denk ik nu een aantal stappen te ver vooruit?

Ik heb ook gezocht, maar niet gevonden naar het formulier waar de vragen en antwoorden op komen maar heb alleen het formulier kunnen vinden waar de vragenlijst mee gegenereed worden. Ik wilde de antwoordkolommen iets groter maken, bij testen bleek dat 1 antwoord niet in het vakje paste. (Bij vraag A)

Alvast heel erg bedankt voor de genomen moeite.
 
Laatst bewerkt:
In deze versie:

Het werkblad 'antwoorden' opgezet met:
kolom A: het kenmerk van de vraag
kolom B: de vraag
kolom C t/m F: 4 alternatieve antwoorden op de vraag. het goede antwoord is aangegeven met een tilde ~
kolom G : de waardering van de vraag.
Op deze manier kun je in het werkblad 'antwoorden' gemakkelijk gegevens met de hand invoeren/wijzigen

Zie in de gebeurtenis Userform_initialize hoe dit hele werkblad met 1 regel VBA wordt omgezet in een tekstreeks.

Om de hoeveelheid code te beperken is een klassemodule toegevoegd die de gebeurtenissen van de vinkvakken (bij de selectie van onderwerpen) efficiënt afhandelt.
Dezelfde klassemodule neemt ook de afhandeling van de gebeurtenissen van de keuzerondjes (bij het beantwoorden van iedere vraag) voor zijn rekening.
Zie in de Userform_Initialize code hoe met een zeer beperkte hoeveelheid code deze vinkvakken en keuzerondjes aan de code in de klassemodule worden gekoppeld.

In plaats van een werkblad met resultaten is een pagina in het userform toegevoegd waarin de resultaten van de beantwoording te zien zijn. Het werkblad 'rapportage' is daarom verwijderd.
Als een vraag goed is beantwoord, is het vinkvak van die vraag aangevinkt.
Als een vraag niet goed is beantwoord is het vinkvak niet aangevinkt, wordt het goede antwoord getoond met daaronder het antwoord dat de gebuiker heeft gekozen (in rood).

Wil je meer weten over VBA klik dan op mijn ondertekening.
 

Bijlagen

Laatst bewerkt:
Beste,

Ik heb wat kleine aanpassingen gedaan maar ik loop toch tegen dingen aan waar ik niet uitkom.

-Het aantal vragen stond op ca. 50 vragen, 10 moest ook kunnen dus met enig speur werk is dat (bijna) gelukt.
In de klassemodule ctl_controle heb ik in de regels "knop_genereer.visible=(50\.keus1.value)=x
en in "if x*keus1.value>50 then .activecontrole=false"
de 50 veranderd in 10 - nu kan ik inderdaad 10 vragen in 1 onderwerp stellen (of 5 in 2, 4 in 3 etc.)
Alleen als ik 18, 19 of 20 vragen in 1 onderwerp wil stellen geeft hij de knop genereer vragen wel eens niet weer.

-Bij de vragen was de tekst op de knop "Vervolg" niet goed leesbaar, dit heb ik uiteindelijk voor elkaar door in de klassemodule ctl_controle
" .forecolor=RGB(0,0,0) " toe te voegen. Waar ik hier nog niet uit ben is dat bij iets langere antwoorden de tekstbox ( of wat het ook is)
zijn hoogte niet automatisch aanpast zodat niet het gehele antwoord te lezen valt. Ik ben bij F1 (help) tegen iets van "autofit" aangelopen
maar zou absoluut niet weten waar dit toe te passen. Daarnaast vraag ik me af of dit de hoogte wel aanpast in plaats van de breedte.

-Na het beantwoorden van alle vragen doorloop je een rapportage waarbij alle goede antwoorden aangevinkt staan en bij de niet juist
beantwoorde vragen zie je het gegeven antwoord en het juiste antwoord. Ook hier geldt weer het aanpassen van de hoogte met de antwoorden.
Daarnaast speelt hier nog mee dat als het aantal vragen wat beantwoord is je op volgende kan blijven klikken, de nummers door blijven
tellen ( 5-10, 10-15, 95-100 etc. ) maar ik kan ook niet afsluiten behalve met het rode kruisje waardoor ik in het tabblad "Antwoorden"
terecht kom. Kunnen hier 2 knoppen bij? - "Opnieuw" en "Afsluiten" Waarbij je met Opnieuw weer bij de keuze voor de onderwerpen komt.

Het onbedoeld op het tabblad "Antwoorden" komen heb ik nu ondervangen met een extra tabblad en het blad antwoorden weer verborgen.
Hierdoor komt iemand die op het rode kruisje drukt niet zomaar op het blad antwoorden terecht.

Is het nog mogelijk om het percentage goede antwoorden ergens te plaatsen? Bijvoorbeeld in de rechter bovenhoek van het overzicht van de
gegeven antwoorden of op een scherm voor dit overzicht.
 

Bijlagen

Als je per vraag de grootte van objecten in het userform gaat aanpassen krijg je voor de gebruiker een zeer onrustig beeld.
Het is beter in het ontwerp van het userform de objecten al een voor de toepassing optimale grootte te geven.
Plaats de vragen hier zodat we kunnen kijken wat die optimale grootte is.

Probeer eerst eens een oplossing te bedenken voor afsluiting van de rapportage zonder extra knoppen.
Is het, gezien waarvoor de toepassing bedoeld is, voor de hand liggend een knop 'opnieuw' te maken zodat de gebruiker nogmaals zo'n vermaledijde vragenlijst moet doorploeteren ?

Als iets niet goed leesbaar is wijzig je dat in het ontwerp, niet in de code.
 
@ snb,

Over het onrustige beeld had ik nog niet na gedacht, ook hierin heb je weer gelijk. Ik zal een aantal vragen en antwoorden in A-VRAGEN zetten.

Betreft het verzinnen van een oplossing voor het afsluiten: Ik heb geen idee wat precies de mogelijkheden zijn, maar een vervolgscherm met het voorstel om af te sluiten, bij ok afsluiten en bij cancel opnieuw? En of het de vragen opnieuw "doorploeteren" is hangt af van of ze het EHBO boek hebben gelezen :d , het bestand is bedoeld als studiehulpmiddel en het scoringspercentage puur als stimulatie. Er moet ook geoefend kunnen worden op 1 onderwerp, vandaar dat de knop genereer vragen al vanaf 10 vragen totaal zichtbaar moet zijn. Ook vind ik het belangrijk dat niet iedereen zomaar bij de antwoorden kan komen.

Betreft het wijzigen in de code of het ontwerp: Ik kon het ontwerp niet vinden, alleen het ontwerp van het scherm om de vragen te genereren. Kan je ook aangeven waar ik het ontwerp kan vinden?

Ik zal nu eerst een aantal vragen in het bestand gaan zetten en het bestand posten.

Bedankt,
 
Laatst bewerkt:
Dat afsluiten is is opgelost in mijn volgende versie.
Ik wacht daarmee totdat je de vragen hebt geplaatst zodat het ontwerp daarop aangepast kan worden.

Het ontwerp is het userform zoals je dat ziet in de VBEditor.
Let er wel op dat het userform eruit ziet als 1 pagina, doch feitelijk 3 verschillende pagina's (van de multipage 'boek') bevat.
Wil je die gemakkelijk zichtbaar maken dan zul je de eigenschap van 'boek' waarmee tabs worden getoond, moeten aanpassen, zodat iedere pagina een tab heeft.
 
Ik heb nu alle A vragen gevuld met de antwoorden, dit zal om en nabij de lengte zijn van de langste antwoorden.

Ik zal nu eens kijken of ik iets met het "boek" kan.
 

Bijlagen

Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan