Maandelijks archief: oktober 2014

Nijntje Schuif 2.0

Deze keer een vreemde Excel-toepassing; het bekende schuifspelletje: NijnSchuifschuif vakjes op en neer net zolang totdat het oorspronkelijke plaatje tevoorschijn komt.

Net zo vreemd als de toepassing is ook de aanleiding: op een feestje, een paar weken geleden, kwam ik na lange tijd een vriend van een zoon van mij tegen en zoals het dan gaat begonnen we herinneringen op te halen.
We kregen het ook over onze gezamenlijke programmeer-activiteiten: meer dan 15 jaar terug hadden we als LKG-software (Ludo, Koen, Gijs) een website waar spelletjes konden worden gedownload. Deze hadden allemaal als thema het bekende Nijntje.
Eén van de spelletjes was het verschuiven van vierkantjes op het scherm, zodanig dat er een mooi plaatje ontstond (uiteraard met het Nijntje-figuur; vanuit royalty-problemen mogen we die helaas niet meer gebruiken, maar de naam Nijntje Schuif laten we nog voortleven!).

Het leek me wel een uitdaging om dit in Excel na te bouwen.
Nou, een uitdaging was het! Qua principe had ik een prototype snel aan de praat, maar om dit leuk met plaatjes te doen, dat viel nog niet mee.

Deze keer eerst een opzet waarbij het principe en de programmeersystematiek van het schuifspel duidelijk wordt; een volgende keer een mooiere uitvoering.

Nijntje Schuif 2.0

Nijntje SchuifDe basis voor deze eerste versie van de moderne uitvoering van Nijntje Schuif vormen de 16 cellen C4:F7.
Dit blokje cellen heeft de naam cNijn gekregen, zodat we daar binnen VBA makkelijk naar kunnen verwijzen.

Verder heb ik ook de cellen I7 en I8 een naam gegeven: cReset respectievelijk cNwRonde. Deze cellen gebruiken we om de cijfers direct in de juiste volgorde te zetten (een Reset dus) en om een nieuw spelletje te beginnen (de cijfers worden door elkaar gehutseld).
Om een VBA-routine (een macro) te starten wordt meestal een button gebruikt; deze keer gebruik ik daarvoor cellen. Wanneer op de cellen I7 of I8 geklikt wordt (of met de cursor deze cellen wordt geselecteerd) dan start de betreffende routine op.
Ditzelfde idee (reageren op het veranderen van de selectie in een werkblad) gebruiken we ook om cijfers in het vierkant te verplaatsen. Klik op een genummerde cel en het programma zal controleren of deze cel verwisseld kan worden met de lege.

De mogelijkheid om met behulp van VBA te reageren op een selectiewijziging kan uiteraard voor diverse doeleinden gebruikt worden.

 VBA-reactie bij wijziging van selectie

Nijn SchuifBelangrijk is dat een dergelijke routine (Sub Worksheet_SelectionChange) aan het betreffende werkblad wordt toegevoegd (in dit geval het tabblad Nijntje).

In het voorbeeld hierboven zal een Reset worden uitgevoerd, wanneer de cel die geselecteerd wordt (de Target) overeenkomt met de cel cReset.
Misschien wat vreemd geconstrueerd (als de overlap tussen Target en cReset niet leeg is), maar ik zie geen andere oplossing.

Op dezelfde manier wordt gecontroleerd of er een nieuwe speelronde moet worden opgestart (via de cel cNwRonde). In dat geval wordt een andere routine in de module NijnSchuif uitgevoerd, namelijk NieuweRonde.

‘Verplaatsen’ van een vierkantje

Op dezelfde manier testen we of één van de 16 vierkantjes van cNijn wordt geselecteerd:

Nijn SchuifAls dat zo is, dan leggen we de positie vast in intRij en intKolom en controleren dan eerst in de array/matrix Nijntje of de betreffende cel leeg is; zo ja dan moet die cel even rood gekleurd worden en verder niets.

Hopelijk is de uitleg in het voorbeeldbestand genoeg om de overige controles te begrijpen.

Variabelen declareren

In diverse routines worden variabelen gebruikt om tussenwaarden op te slaan, die voor de werking van de routine nodig zijn. Het is een goede gewoonte om deze vooraan in de routine te declareren met behulp van het statement Dim. Deze variabelen zijn dan alleen geldig in de betreffende routine.

Nijn Schuif

Voor de goede werking van ons NijntjeSchuif-programma is het echter ook nodig, dat sommige variabelen door alle routines kunnen worden gebruikt (bijvoorbeeld in welke rij staat de lege cel, intLegeCelRij).
Deze variabelen worden niet door Dim gedeclareerd, maar door Public ergens ‘buiten’ de routines; in dit geval in de module Algemeen.

Opstart-routine

Om ons spel te kunnen gebruiken is het van belang, dat diverse variabelen een waarde hebben. De routine Reset neemt dit allemaal voor zijn rekening.
Nijn SchuifOm zeker te weten, dat het spel meteen gespeeld kan worden (nadat een Nieuwe ronde is gekozen), zorgen we dat de reset-routine direct wordt uitgevoerd wanneer we de werkmap openen.
Dit gebeurt door in de subroutine Workbook_Open de reset-opdracht op te nemen.

LET OP: deze subroutine moet u altijd plaatsen in het speciale Excel-object ThisWorkbook.

De routine Workbook_Open is heel handig. U kunt er bijvoorbeeld voor zorgen, dat een bepaald tabblad altijd actief wordt bij het openen (Sheets(“Nijntje”).Select) of dat de eerste cel wordt geselecteerd (Range(“A1”).Select) of een combinatie.

Veel plezier met het spelen van Nijntje Schuif 2.0!

Zoals gezegd: volgende keer een fraaiere uitvoering; dus versie 2.1 komt er aan.


Wil je op de hoogte gebracht worden, wanneer er weer een nieuw item aan Tips & trucs is toegevoegd:

Handige opties in Access

Hoe vaak ik per dag in Excel de toets-combinatie Alt-= gebruik weet ik niet, maar ik kan hem in ieder geval blindelings vinden.

Wanneer je de cursor onder een serie getallen zet, geeft Excel met behulp van die 2 toetsen (Alt-toets vasthouden en dan het =-teken indrukken) de som van die getallen.
De truc werkt ook als de cursor rechts van een rijtje getallen staat.

In Access was dat tot voor kort niet mogelijk en voerde ik de volgende handelingen uit, als ik een tabel of de resultaten van een query op het scherm had:

  1. Ctrl-a om alle records en kolommen te selecteren OF
    met de cursor de gewenste records selecteren OF
    met de cursor één of meerdere kolommen selecteren OF
    met de cursor een blok gegevens selecteren
  2. Ctrl-c; de selectie kopiëren
  3. naar Excel gaan (eventueel via Alt-Tab als Excel al geactiveerd is)
  4. Ctrl-n; een nieuwe werkmap openen
  5. Ctrl-v; gegevens uit Access plakken
  6. Ctrl-pijl om naar de laatste regel te gaan
  7. dan de cursor direct onder de kolom met de gegevens, waarvan ik een totaal wil weten
  8. Alt-= en eventueel via Ctrl-1 nog even de opmaak regelen

Totalen in Access

Sinds Microsoft versie 2010 van Access heeft uitgebracht, zijn bovenstaande handelingen meestal overbodig.

Totalen

In dit overzicht heeft Access het aantal omschrijvingen geteld en de som van het Aantal en van de bedragen.

LET OP: bij het bepalen van een aantal wordt een leeg veld niet meegerekend!

Hoe creëren we de totalen:

  1. kies het menu-tabblad StartTotalen2
  2. zoek daarbinnen het blok Records
  3. klik op Totalen
  4. onderaan het scherm komt een nieuwe regel met vooraan het woord Totaal
  5. onder iedere kolom kun je nu totalen selecteren door middel van het keuze-driehoekje (zie hierboven bij het totaal 6.630,00); de mogelijkheden zijn afhankelijk van het type veld: bij een tekstveld kun je alleen aantallen turven, bij numerieke velden ook de som of gemiddelde etc.

Maak je een selectie dan passen de totalen zich automatisch aan.

LET OP: de totalen vormen geen echte, nieuwe regel onderaan; ze ‘zweven’ min of meer boven de lijst met gegevens. De totalen zijn dan ook altijd zichtbaar!

Object-afhankelijkheden

Tijdens de ontwikkeling van een grote database met tientallen tabellen en misschien wel honderd query’s, kan het nog wel eens gebeuren, dat je het overzicht kwijtraakt.

In het begin heb je tabellen meegenomen, die later toch niet meer gebruikt worden; hoe weet je dat zeker?
Of de structuur van een tabel wordt iets aangepast; voor welke query’s heeft dit misschien consequenties?

Neem de volgende stappen:ObjAfhankel

  1. selecteer  links in het navigatie-venster een tabel of query waar je de afhankelijkheden van wilt weten
  2. kies het menu-tabblad Hulpmiddelen voor databases
  3. zoek daarbinnen het blok Relaties
  4. klik op Object-afhankelijkheden

ObjAfhankel2

In dit geval zie je direct dat er 5 query’s gebruik maken van de tabel Product.

Via de 2e keuzebutton kun je ook zien waar deze tabel van afhankelijk is.
Deze optie is vooral van belang bij query´s om snel te achterhalen welke tabellen of andere query´s gebruikt worden.

 


Wil je op de hoogte gebracht worden, wanneer er weer een nieuw item aan Tips & trucs is toegevoegd: