RSS

Billet- eller nummerkontrol med VBA makroer

Der er ingen kodeeksempler på denne side, men i det zip-komprimerede regneark (billet-nummerkontrol.zip), som du kan downloade ved at klikke på dette link, finder du VBA-koden med udførlige kommentarer.

Der er såmænd ikke voldsomt meget VBA-kode, men alligevel for meget til at vise på én side her, og da det er et program til billetkontrol under en festival - altså konkret brug - er det bedst at se "the real thing".

Det kan selvfølgelig også bruges til andet end billetkontrol - det tjekker om et nummer/tal findes i en nummerserie, og det kunne for den sags skyld lige så godt være pengesedler.

OBS! Hvis du vil prøve regnearket af, skal du starte med at lave en nummerserie. Det gøres ved at trykke på knappen på fanebladet "Setup" og følge anvisningerne.

Programmet indeholder bl.a. eksempler på brug af en Worksheet_SelectionChange event - altså at en makro automatisk kører, når noget ændres på et faneblad.

  • Der er en Auto_Open procedure, som automatisk kører og initialiserer parametre, når regnearket åbnes.
  • Programmet bruger Excels indbyggede søgefunktion.
  • Der er eksempler på brug af arrays og ranges, og hvordan et array kopieres ind i et range i ét hug i stedet for at bruge en meget langsommere løkke.
  • Programmet kan generere en nummerserie, hvor man definerer startnummer, forskellen til næste nummer (fx en stigning på 1 eller 3) samt antal numre.
  • Det bruger en af funktionerne på Find næste tomme celle som range eller offset.
  • Og så er der et simpelt eksempel på en UserForm - altså en dialogboks.

Baggrunden

Jeg blev kontaktet af en festivalarrangør, der spurgte, om jeg ville lave et regneark, som kunne kontrollere, om et billetnummer var i en given nummerserie (altså ikke en forfalskning), og om billetten havde været brugt.

Det lød som en sjov opgave og "et ædelt formål," så jeg sagde ja på den betingelse, at jeg kunne lægge det ud her som eksempel på en applikation til et bestemt formål.

Hvordan

Det foregår på den måde, at kontrolløren skanner et billetnummer (fra stregkode) ind i en celle, eller han indtaster nummeret manuelt (hvis fx skanneren går i udu) og trykker ENTER (eller forlader cellen på anden vis).

Det aktiverer automatisk fanebladets Worksheet_SelectionChange procedure, som tjekker, om det var en ændring af den rigtige celle, om der står noget i cellen osv.

VBA-programmet tjekker derefter, om nummeret findes i nummerserien, og om det har været brugt. Alt efter omstændighederne popper der så en besked op på skærmen med besked til kontrolløren, om billetten er OK eller hvad.

Hvis billetten godkendes, registreres den som brugt/vist, og tidspunktet logges. Ugyldige billetter logges også.

Når kontrollen er færdig efter et splitsekund, slettes nummeret i input-cellen, og cellen aktiveres til en ny skanning/indtastning.

Præcis hvordan skanneren virker, ved jeg ikke, men den skriver tallet i cellen, som var den et tastatur, så VBA er ligeglad, og der er ingen speciel kode, som følge af at der bruges en scanner.

Programmet kan også generere en nummerserie, som så kan bruges, når billetterne skal trykkes.

Andet brug

I sagens natur kan programmet bruges til at tjekke, om et nummer findes i en given nummerserie eller har været brugt før. Det behøver ikke være billetkontrol.

Så kan det selvfølgelig være, at man lige skal lave om på teksten i meddelelserne til "kontrolløren," for hvis det fx er kontrol af pengesedlers numre, ser det jo dumt ud med en besked som "Billet OK".

Relateret: