DR PETER J. SCHARPFF RI EXCEL 2016 VBA PROGRAMMEREN VISUAL BASIC FOR APPLICATIONS

Maat: px
Weergave met pagina beginnen:

Download "DR PETER J. SCHARPFF RI EXCEL 2016 VBA PROGRAMMEREN VISUAL BASIC FOR APPLICATIONS"

Transcriptie

1

2 DR PETER J. SCHARPFF RI EXCEL 2016 VBA PROGRAMMEREN VISUAL BASIC FOR APPLICATIONS 2

3 Excel 2016 VBA Programmeren: Visual Basic for Applications 2de editie 2017 Dr Peter J. Scharpff RI & bookboon.com ISBN

4 Inhoudsopgave INHOUDSOPGAVE Over de maker 7 1 Inleiding 8 2 Ontwikkelomgeving Inleiding Tab Ontwikkelaars 9 3 Macro s Inleiding Macro opnemen Macro uitvoeren Relatieve verwijzing Oefening 21 Leiderschapsvaardigheden Leer strategisch denken en word een betere leider Download ebooks 4

5 Inhoudsopgave 4 Programmeren Inleiding Programma s maken Objecten Programmastructuren Variabelen Commentaar 36 5 De VBA-editor Inleiding Wat zie je in het venster Werkvensters 42 6 Code genereren Inleiding Opnemen Code bewerken Formulieren 50 7 Overzicht Inleiding Hongaarse naamgeving Venster Direct Objectenoverzicht Oefening 63 8 Programmeertechnieken Inleiding Functies Beslissingsstructuren Lussen Toetsen afvangen Variabelen en constanten Foutafhandeling Oefening 86 5

6 Inhoudsopgave 9 Code integreren Inleiding Starten Invoegtoepassing Praktijkcase: een factuurmodel Inleiding De werkmap Factuur Het factureringsformulier De factuur maken Beveiliging Interface Extra oefening Grafieken in VBA Inleiding De werkmap Gebruik 123 6

7 Over de maker OVER DE MAKER Scharpff Consultancy is een adviesorganisatie die al meer dan een kwarteeuw actief is in de automatiseringswereld. Vooral informatievoorziening, training en begeleiding bij het gebruik van persoonlijke automatiseringsmiddelen staan daarbij centraal. Een van de specialiteiten is het faciliteren (en uitvoeren) van individuele opleidingstrajecten voor pc-gebruikers. Het model hiervoor is al begin jaren negentig van de vorige eeuw bedacht door Scharpff Consultancy in samenwerking met diverse andere vakspecialisten. Het wordt ondertussen door de meeste opleidingsinstituten en zelfs door reguliere onderwijsinstellingen gebruikt. Individuele scholing is een bewezen betere methode voor het aanleren van computervaardigheden dan de klassikale trainingen die bij veel partijen in cursusland nog altijd de boventoon voeren. In het bovengenoemde kader is een grote deskundigheid opgebouwd op het gebied van ontwikkelen en publiceren van (cursus)materiaal voor individuele training. Dit werkboek is daar onder andere het resultaat van. Hiermee is het dan ook mogelijk om geheel zelfstandig de gewenste kennis en praktijkvaardigheden met de computer op te doen. Dr Peter J. Scharpff RI de oprichter van deze adviesorganisatie en auteur van dit werkboek is oorspronkelijk afkomstig uit de computer-linguïstische hoek. Zijn wetenschappelijke focus lag op de interactie tussen mens en machine, vooral op de spraak- en taaltechnische kant daarvan. Behalve het ontwikkelen van materiaal voor trainingsdoeleinden op het gebied van kantoorautomatisering, heeft hij ook vele publicaties op zijn naam staan over algemenere onderwerpen als digitale veiligheid, privacy, hardware, programmeren, webdesign, telewerken, sociale netwerken, en dergelijke. 7

8 Inleiding 1 INLEIDING Dit werkboek is bestemd voor iedereen die in Excel 2016 eigen toepassingen wil gaan maken, opgenomen macro s verder wil bewerken, of wat extra functionaliteit wil geven aan het rekenbladprogramma. Want soms schieten de standaardmogelijkheden tekort, en moeten macro s of applicaties ontworpen worden om bepaalde zaken uit te voeren. Om zulk maatwerk te maken, moet je kennis hebben van Visual Basic for Applications (VBA). En tot op zekere hoogte moet je ook leren programmeren. In de eerste hoofdstukken van dit werkboek worden de beginselen van het programmeren in Visual Basic for Applications behandeld: hoe wordt een VBA-project opgebouwd en wat zijn de basishandelingen van het programmeren. In latere modules bespreken we enkele toepassingsmogelijkheden en praktijkvoorbeelden van VBA binnen Excel. Het boek is modulair van opzet. Een module is op de volgende manier opgebouwd: Elk hoofdstuk begint met een korte uitleg over de onderwerpen die aan de orde komen. Elk onderwerp wordt waar mogelijk met een (korte) opgave geoefend. Zo n opdracht beschrijft een mogelijke situatie of probleem, de aanpak en het resultaat. Aan het eind van een hoofdstuk staat vaak nog een extra oefening waarin je de in dat hoofdstuk verworven kennis in praktijk kunt brengen. Opdrachten worden aangeduid met een tekening van een muis. Voer in principe alleen de opdrachten uit, en niet de voorbeelden in de tekst omdat je dan snel kunt verdwalen. Maar uitproberen of experimenteren met andere mogelijkheden is natuurlijk wel vaak nuttig. Al kun je de modules onafhankelijk van elkaar doornemen, toch worden in de opdrachten in dit boek niet altijd meer alle handelingen of toetsaanslagen vermeld, omdat we ervan uitgaan dat je bepaalde vaardigheden ondertussen al hebt, bijvoorbeeld omdat je het basisboek van Excel al hebt bestudeerd. Zo zal meestal alleen de opdracht worden gegeven een bepaalde handeling te verrichten, waarbij je dan zelf moet bedenken hoe je die opdracht kunt uitvoeren. Namen van toetsen en knoppen met teksten zijn tussen vierkante haken [ en ] aangegeven. Als je twee toetsen tegelijk moet intypen, staat er een plusteken tussen: [Alt]+[F]. Als je toetsen ná elkaar moet intypen, staat er niets tussen, bijvoorbeeld: [F5] [2] [Enter]. Titels, teksten en opties die je in beeld tegenkomt, worden in de regel cursief weergegeven, bijvoorbeeld: het venster Eigenschappen bevat enkele rubrieken en tabbladen zoals Weergeven, Beveiliging, en dergelijke. Bestandsnamen en mappen zijn over het algemeen vetgedrukt. We gaan ervan uit dat je de beschikking hebt over de hier beschreven software, en dat je alle reguliere handelingen in Excel en in Windows uit kunt voeren. Alleen waar handelingen sterk afwijken van normaal gebruik, zal dat worden vermeld. 8

9 Ontwikkelomgeving 2 ONTWIKKELOMGEVING 2.1 INLEIDING Visual Basic for Applications (VBA) is een programmeertaal, of eigenlijk meer een ontwikkelomgeving waarmee je je eigen programma s binnen Office kunt bouwen. Deze taal is afgeleid van (en sterk verwant aan) de onafhankelijke programmeeromgeving van Visual Basic, waarmee je échte programma s kunt maken die zelfstandig in Windows kunnen draaien. Zulke programma s herken je aan een bestandsuitgang als.exe. Een programmeertaal kent instructies om de computer bepaalde taken te laten uitvoeren. Deze programmacode is op een bepaalde manier gestructureerd en kan allerlei (complexe) methoden gebruiken om de instructies door de computer te laten uitvoeren. VBA-programma s kunnen alleen maar in de Office-omgeving werken, ze zijn afhankelijk van het moeder - programma waarin ze zijn geschreven. In dit werkboek bekijken we de mogelijkheden binnen de omgeving van Excel. Waarom zou je in een rekenbladprogramma met zoveel functionaliteit willen programmeren, zul je je misschien afvragen. Vaak is het antwoord: om routinehandelingen te automatiseren. Maar dat is wat kort door de bocht, tenslotte kun je daarvoor ook macro s gebruiken. Het échte antwoord ligt vooral in de intelligente uitvoering van bepaalde instructies. Als je bijvoorbeeld een handeling wilt automatiseren maar alvast wat gegevens van de gebruiker wilt verzamelen, of als je eerst met de gebruiker wilt communiceren over de uitvoering van de instructies. Met vragen als Wat is de beginwaarde voor de berekening?, Waar staan de gegevens? of Welk rapport wil je afdrukken?. Programma s worden in VBA geschreven in de vorm van projecten die extra functionaliteit toevoegen aan de standaardsoftware. Ze bevatten instructies die gebruik kunnen maken van bestaande gegevens, objecten en hulpmiddelen zoals bladen, tabellen, grafieken of knoppen. De projecten worden gestart vanuit de Office-omgeving in dit geval vanuit Excel en zijn daarbuiten niet als onafhankelijke programma s te herkennen. Daarom heeft VBA een speciaal projectvenster: de VBA-editor. Dit kun je zien als een bibliotheek met objecten, methoden en hulpmiddelen, diverse eigenschappenvensters en foutopsporingsmogelijkheden. 2.2 TAB ONTWIKKELAARS Om met VBA, de editor en andere genoemde en gerelateerde zaken te werken, is het nodig om de speciale tab Ontwikkelaars in het lint te activeren. Standaard is die namelijk niet in beeld. Start Excel met een lege werkmap. Ga naar de Opties voor Excel (via tab Bestand), rubriek Lint aanpassen. 9

10 Ontwikkelomgeving Figuur 2.1 De tab Ontwikkelaars weergeven Vink in het rechtervak het hoofdtabblad Ontwikkelaars aan. Sluit het venster met [OK]. Activeer de tab Ontwikkelaars in het werkvenster en bekijk vluchtig de opties en mogelijkheden. Lees wel even de uitlegkadertjes die verschijnen als je de elementen aanwijst. Figuur 2.2 Tab Ontwikkelaars in Excel Met behulp van VBA kunnen bepaalde handelingen worden geautomatiseerd en aangepast aan specifieke eisen of wensen. Dat is in feite ook de werkwijze van macro s. Als je in Excel een macro opneemt om bijvoorbeeld routinehandelingen te automatiseren, maakt VBA daarvoor op de achtergrond zelf de benodigde programmacode aan. Deze code wordt weer uitgevoerd als je de macro opnieuw laat uitvoeren. Je kunt die instructies ook zelf invoeren: je gaat dan programmeren in VBA. Dat komt verderop aan de orde, laten we in het volgende hoofdstuk eerst eens even kijken naar het verschijnsel macro. 10

11 Macro s 3 MACRO S 3.1 INLEIDING Macro s zijn een soort programmaatjes om vaak terugkerende handelingen uit te voeren. Je kunt ze gemakkelijk activeren met het indrukken van een bepaalde toetscombinatie als je die aan de macro hebt gekoppeld. Het uitvoeren van een macro zorgt ervoor dat je heel wat minder handelingen muisklikken en/of toetsaanslagen hoeft te verrichten voor een bepaalde (routine)taak. 3.2 MACRO OPNEMEN Macro s kun je op een eenvoudige manier maken door je handelingen door Excel te laten registreren alsof het een opname betrof met een band-, video- of harddisk-recorder (als je tenminste nog weet wat dat is). Het opnemen kun je op diverse manieren starten: Met een klik op de knop [Macro opnemen] in groep Programmacode van tab Ontwikkelaars (zie figuur 2.2). Door op de macro-knop te klikken in de statusbalk onderaan je venster. Figuur 3.1 Macroknop in de statusbalk Door de optie Macro opnemen te kiezen in de keuzelijst van de knop Macro s aan de rechterkant van tab Beeld. Deze knop is daar geplaatst voor de gebruikers die verder geen behoefte hebben aan de mogelijkheden van tab Ontwikkelaars. Figuur 3.2 Macro s maken via tab Beeld In alle gevallen maakt Excel een speciaal Visual Basic-werkblad voor je aan met de opgenomen handelingen. Om een en ander te illustreren gaan we nu een simpele macro opnemen die de breedte van een kolom kan instellen op een bepaalde waarde met één sneltoets. Nu vergt deze handeling niet zo heel veel muisbewegingen en toetsaanslagen, maar het is wel een voorbeeld van het vervangen van een aantal routinehandelingen door een macro. 11

12 Macro s Voor de macro die je gaat maken, moet je een naam bedenken en een locatie (werkmap) waarin hij beschikbaar is. Verder mag je er een sneltoets aan toekennen en eventueel ook nog een beschrijving geven. En voor je de opname daadwerkelijk start, moet je alvast nadenken over welke handelingen je straks moet gaan uitvoeren. Even die handelingen oefenen (en weer ongedaan maken) kan geen kwaad. Start via een van de genoemde mogelijkheden een nieuwe Macro-opname. Figuur 3.3 Macro definiëren Communicatieve vaardigheden Leer effectief communiceren Download ebooks 12

13 Macro s Vul het venster in zoals in figuur 3.3 (we hebben er ook de beschrijving aangepast) en klik op [OK]. Onderin het scherm verschijnt nu naast Gereed een knopje met een blokje en als je dat aanwijst zegt het uitlegkadertje: Er wordt momenteel een macro opgenomen. Klik als u de opname wilt beëindigen. En op tab Ontwikkelaars is de optie Macro opnemen vervangen door Opname stoppen. ALLE toetsaanslagen of handelingen die je vanaf nu doet, worden opgeslagen in het macrogeheugen, totdat je op een van knopjes klikt om de opname te stoppen. Voer nu de handelingen uit die nodig zijn om de breedte van de huidige kolom in te stellen op 15, bijvoorbeeld: tab Start, groep Cellen, knop Opmaak, Kolombreedte, 15, [OK] (dit kan ook via het contextmenu van een cel in de huidige kolom). Sluit de opname af. De macro is nu opgeslagen in een speciaal Visual Basic-werkblad. Laten we dat even bekijken om te zien wat Excel heeft geregistreerd. Laat de Macro s weergeven (via tab Ontwikkelaars of via tab Beeld). Figuur 3.4 Macro s weergeven en beheren 13

14 Macro s In dit venster Macro zie je de zojuist opgenomen macro staan, en als er al eerder macro s zouden zijn opgenomen in deze werkmap, staan die natuurlijk ook in de lijst. Van hieruit zou je de macro nog een keer kunnen laten uitvoeren, bijvoorbeeld nadat je eerst naar een andere kolom bent gegaan. Maar nu gaan we kijken wat de code is achter macro Kolombreedte15. Zorg dat de macro is geselecteerd en klik op de knop [Bewerken]. In een nieuw venster dat speciaal ingericht is voor VBA verschijnt nu een venstertje met de geregistreerde code. Wat er precies allemaal staat, is nu nog even niet van belang, daar komen we later op terug. Figuur 3.5 VBA-editor Lees in venster Module1 (Code) het commentaar (in het groen weergegeven in regels die beginnen met een apostrof) en de instructie eronder. Die instructie is het enige wat er daadwerkelijk gebeurt als de macro wordt uitgevoerd: stel de breedte van de geselecteerde kolom dus waar zich de actieve cel bevindt in op 15 tekens. De commentaarregels staan er als documentatie (voor de programmeur, dus ook voor jou), maar Excel slaat zulke regels over tijdens de uitvoering. 3.3 MACRO UITVOEREN Om de zojuist gemaakte macro uit te voeren, kun je een andere kolom selecteren of eventueel meerdere en vervolgens daar de macro Kolombreedte15 nog eens uitvoeren. 14

15 Macro s Laat het venster van VBA openstaan (plaats het eventueel versmald samen met het venster van de werkmap in beeld). Selecteer in de lege werkmap nu een andere kolom en voer de macro nogmaals uit (gebruik deze keer de sneltoets). Selecteer twee kolommen en laat die in één keer door de macro 15 tekens breed maken. Maak nu een multiselectie van drie (niet aaneensluitende) kolommen en maak hun breedte ook 15. Maak een willekeurige kolom flink breed (versleep bijvoorbeeld de rechtergrens ervan) en laat die breedte door de macro terugbrengen naar 15. Er zijn dus flink wat situaties waarin je deze macro kunt gebruiken. Toch is er ook een beperking, want we hebben deze macro gekoppeld aan de huidige werkmap (zie figuur 3.3). Dit betekent dat je de macro alleen kunt gebruiken als deze werkmap geopend is. Sluit en bewaar deze werkmap: zorg ervoor dat je als bestandstype Excel-werkmap met macro s instelt, en geef het bestand de naam Breedte(.xlsm). Zodra je werkmap is gesloten, verdwijnt ook het venster van de VBA-editor. Figuur 3.6 Opslaan als werkmap met macro s Time management Tips om je tijd effectiever te gebruiken! Download ebooks 15

16 Macro s Open een nieuwe lege werkmap (mag trouwens ook een bestaande zijn). Gebruik de sneltoets van de macro: [Ctrl]+[k]. Wat gebeurt er? Wat er in ieder geval niet gebeurt is het instellen van een kolombreedte, en dat komt omdat de macro met de sneltoets nu niet beschikbaar is. De werkmap waaraan die macro is gekoppeld, is immers gesloten. In beeld verschijnt het venster Hyperlink invoegen, wat de normale uitvoering is van de sneltoets [Ctrl]+[k] (wijs de knop Hyperlink op tab Invoegen maar eens aan). Figuur 3.7 De knop Hyperlink invoegen met sneltoetsaanduiding Denk bij het definiëren van macro s goed na over het toewijzen van sneltoetsen die al in het programma in gebruik zijn bijvoorbeeld als standaardsneltoets, of die al zijn gedefinieerd als toetscombinatie voor een andere macro! Als je zo n macrosneltoets overal beschikbaar stelt, gaat de oorspronkelijke functie van de toetscombinatie mogelijk verloren. Sluit het venster Hyperlink invoegen, en sluit de werkmap (bewaren niet nodig). Uitvoeren en bewaren van macro s is ook verderop nog van belang als je gaat programmeren in VBA. Veel taken en instructies worden namelijk als macro gestart of uitgevoerd. We gaan er nader op in zodra het aan de orde is bij een onderwerp. 3.4 RELATIEVE VERWIJZING De macro die de kolombreedte regelt, werkt in elke kolom waar je hem uitvoert. Want het enige dat de macro doet, is de breedte instellen. In dat opzicht is de macro dus relatief ten opzichte van de positie waar je die uitvoert: sta je in een cel in kolom B dan past de macro de breedte van die kolom aan naar 15 tekens, en als je daarna in kolom XY staat, doet de macro hetzelfde voor die kolom. 16

17 Macro s Maar als de handelingen die je doet tijdens het opnemen van de macro inhouden dat je naar andere cellen moet navigeren of bijvoorbeeld kolommen of rijen moet selecteren kan er een ongewenst effect optreden. Zulke handelingen beschouwt Excel namelijk als absolute verwijzingen. We maken daarom even een nieuwe macro die rekening houdt met de relatieve positie van de actieve celwijzer. Stel dat je bijvoorbeeld op een willekeurige plek in een werkblad je naam, adres en woonplaats wilt zetten in drie cellen onder elkaar. Daarvoor moet je de celwijzer tweemaal een cel naar beneden verplaatsen. Je moet dan aan Excel laten weten dat je dat relatief wilt doen ten opzichte van waar zich de celwijzer bevindt. Begin een nieuwe lege werkmap. Klik op tab Ontwikkelaars, groep Programmacode op de knop Relatieve verwijzingen gebruiken (die optie blijft dan geselecteerd) Figuur 3.8 Relatieve opname Leiderschapsvaardigheden Leer strategisch denken en word een betere leider Download ebooks 17

18 Macro s Start nu de opname van een nieuwe macro NAW (alleen beschikbaar in deze werkmap, sneltoets: [Ctrl]+[n]) die je naam en adres in drie onder elkaar gelegen cellen neerzet, en vervolgens de kolombreedte aanpast aan de lengte van de langste cel uit dit adres (bijvoorbeeld de straatnaam + huisnummer). Stop de opname. Selecteer een andere cel en laat daar opnieuw je adres plaatsen. Doordat je de optie Relatieve verwijzingen gebruiken bij het opnemen van de macro hebt ingeschakeld, zullen bij het opnieuw uitvoeren op een andere plaats de tweede en derde tekstcel onder de eerste worden gezet. Als je dit zou zijn vergeten, komt wel de eerste tekstcel op de nieuwe plaats, maar de tweede (en derde) op dezelfde plaats als tijdens de definitie. Laten we eens kijken hoe dat precies in elkaar zit. Ga (via Macro s weergeven) naar de VBA-editor en bekijk de code van deze NAW-macro. Figuur 3.9 Coderegels van de macro Zo te zien heb je al aardig wat geprogrammeerd. Je kunt regel voor regel de instructies lezen wat er moet gebeuren als je de macro laat uitvoeren: het programma typt in de eerste (actieve) cel de naam, verplaatst de celwijzer één regel naar beneden (en nul kolommen), typt daar de adrestekst, et cetera. Dit soort code moet je leren lezen, en als je begrijpt hoe die in elkaar zit, kun je er ook wijzigingen in aanbrengen. Als je bijvoorbeeld iets in het adres zou willen wijzigen, is het bewerken van de code sneller dan de macro opnieuw definiëren. 18

19 Macro s Regel voor regel de code laten uitvoeren door Excel kan ook. Dat is een veelgebruikte methode om eventuele fouten in de code op te sporen. Later in dit werkboek komen we er nog uitgebreid op terug, nu laten we even in het kort zien wat er gebeurt als de macro (of liever: de instructies daarin) wordt uitgevoerd. Selecteer een cel een beetje links in het werkblad, en plaats het venster met de code zodanig in beeld dat je die actieve cel op de achtergrond nog kunt zien (zie figuur 3.10). Laat via menu Beeld van het VBA-venster hier is geen lint, maar werk je met menu s en werkbalken de werkbalk Foutopsporing weergeven, en plaats die in de buurt van de code. Figuur 3.10 Onderbrekingspunt invoegen Zorg dat je tekstinvoegpunt in de eerste coderegel staat, en klik in de werkbalk Foutopsporing op het knopje Onderbrekingspunt. De regel wordt gemarkeerd en er verschijnt een bolletje in de kantlijn. Hier gaan we de uitvoering van de macro zo meteen stoppen. Daarna laten we Excel de instructies stap voor stap uitvoeren. Je kunt dan nauwkeurig volgen wat er gebeurt. Start de macro door in de werkbalk Foutopsporing op de knop Sub/UserForm uitvoeren te klikken. Figuur 3.11 Start de macro vanuit het codevenster 19

20 Macro s Merk de sneltoetsen op in de uitlegkadertjes van de knoppen die je aanwijst. De macro had je dus ook met sneltoets [F5] kunnen starten, het onderbrekingspunt mag je ook met [F9] plaatsen, et cetera. De macro wordt nu direct onderbroken want het onderbrekingspunt staat al meteen in de eerste uit te voeren regel van de subprocedure. Je ziet in de kantlijn een geel pijltje en de rest van de regel wordt geel gemarkeerd. Daarmee geeft Excel aan dat deze regel aan de beurt is om uitgevoerd te worden. Figuur 3.12 Stap voor stap uitvoeren Ga nu één stap verder in het uitvoeren van de code. Dat kan via het knopje in het werkbalkpalet, maar sneltoets [F8] is handiger. Communicatieve vaardigheden Leer effectief communiceren Download ebooks 20

21 Macro s Als het goed is, zie je nu de naam verschijnen in de actieve cel in het werkblad, en de volgende coderegel die aan de beurt is, wordt gemarkeerd. Laat de volgende stap uitvoeren zodat de celwijzer een cel naar beneden wordt verplaatst. Voer zo alle instructies stap voor stap uit en zie het adres verschijnen en de kolom passend worden. Zorg dat ook de laatste stap wordt uitgevoerd: End sub (anders blijf je in het programma hangen ) Mocht je ondanks alles ergens zijn blijven hangen, en je kunt niet meteen wijzigingen in de code aanbrengen, stop dan de uitvoering van de procedure met het knopje Beginwaarden (met het blauwe blokje) van de werkbalk Foutenopsporing. Verander in de code dus niet in het werkblad de postcodeletters in ZZ en laat de macro opnieuw uitvoeren vanuit het codevenster ([F5] en meteen daarna [F5] om de rest uit te voeren is nu het handigst). Zo, je hebt nu dus al aardig wat code gezien en daar zelfs handmatig op ingegrepen. In de macro kun je dus allerlei handelingen vastleggen en die eventueel naar believen aanpassen. Ook dat is een vorm van programmeren, maar wel een aangepaste vorm. Een programmeur zou liever met een blanco venster beginnen en daar alle code zelf invoeren. In beide gevallen is het wel belangrijk om te weten wat programmeren is. In het volgende hoofdstuk gaan we daar uitgebreid op in, maar wel met in het achterhoofd dat dit programmaatjes zal opleveren binnen een ander programma. 3.5 OEFENING Maak nog een adresmacro in deze werkmap (met de naam Adres, sneltoets [Ctrl]+[a]), maar nu zonder Relatieve verwijzingen gebruiken. Zie wat er gebeurt als je deze macro nog eens laat uitvoeren. Bekijk en vergelijk in het VBA-venster de code van de twee macro s. 21

22 Macro s Figuur 3.13 Relatief of niet Sluit je bestanden (bewaren hoeft niet) Relatieve verwijzingen zijn dus erg belangrijk, want ze hebben heel andere consequenties in de uitvoering van je programma s dan absolute verwijzingen. Verderop in dit werkboek komt het nog regelmatig aan de orde. 22

23 Programmeren 4 PROGRAMMEREN 4.1 INLEIDING VBA is net als grote broer Visual Basic een objectgeoriënteerde en door gebeurtenissen gestuurde programmeertaal. De gebruiker van een VBA-programma (module) kan op willekeurige wijze en volgorde op knoppen of opties klikken, bepaalde gegevens in vakken invoeren of kiezen, et cetera. Al die objecten moeten daarom onafhankelijk van elkaar van de juiste instructies worden voorzien. Die instructies moeten worden uitgevoerd als zo n handeling (gebeurtenis) plaatsvindt. Daarom bestaat een VBA-programma eigenlijk uit een hele reeks programmaatjes (subprocedures of subroutines), elk met eigen instructies die onafhankelijk van elkaar kunnen worden uitgevoerd. Maar ook kunnen deze programmaonderdelen op een of andere manier met elkaar gekoppeld zijn, zodat de uitvoering van het ene programmaonderdeel van invloed is op de uitvoering van een ander onderdeel. Time management Tips om je tijd effectiever te gebruiken! Download ebooks 23

24 Programmeren 4.2 PROGRAMMA S MAKEN Voordat je nu meteen gaat starten met programmeren (instructies schrijven), is het verstandig eerst eens na te denken over hoe een programma tot stand komt. En ook over wat je programma moet doen, welke middelen of elementen nodig of handig zijn, of alles naar behoren zal werken, et cetera. We bespreken hieronder in het kort de belangrijkste aspecten van het maken van VBA-programma s. Zo n programmeerproject bestaat uit meerdere fasen. Stap 1: Probleemstelling In deze eerste fase moet je vaststellen wat je programma precies zal moeten doen. Als je het programma voor andere gebruikers schrijft, moet je inventariseren wat die gebruikers willen met het programma. Stel dat je de opdracht krijgt een hypotheekberekeningsprogramma te ontwerpen. Wat wordt hier dan precies mee bedoeld? Wat voor berekeningen moeten ermee worden uitgevoerd en waarom kan dat niet met de standaard rekenopties in Excel? Een mogelijk antwoord kan zijn: de gebruiker wil de maandtermijnen voor een lening of hypotheek uitrekenen, maar kent daarvoor de functies en formules niet. Daarnaast moet het resultaat van de berekening door het programma op een bepaalde manier worden teruggemeld aan de gebruiker. Als je alle gebruikerswensen in kaart hebt gebracht, is het verstandig om dit als een soort startpunt vast te leggen in een speciaal ontwerpdocument: men noemt dat ook wel de program requirements (programma-vereisten). Stap 2: Technische analyse Als je weet wat er precies moet worden geprogrammeerd, moet je je tijdens de technische analyse de technieken en middelen eigen maken die nodig zijn voor het schrijven van het programma. Misschien moet je een VBA-taalelement gebruiken dat je nog nooit eerder hebt gebruikt. Het is verstandig via kleine oefenprogrammaatjes zulke zaken te bestuderen en te testen op bruikbaarheid. Stap 3: Plaats van het programma Voordat je echt kunt gaan programmeren moet je je afvragen of het programma altijd beschikbaar moet zijn als de gebruiker in Excel werkt. Of hoort het bij een bepaald (soort) rekenmodel? In Excel kun je programma s koppelen aan: het moederprogramma: ze zijn altijd beschikbaar als Excel actief is; een werkmap: ze zijn alleen beschikbaar als dat bestand wordt gebruikt; een sjabloon: ze zijn alleen beschikbaar als een werkmap is gebaseerd op een sjabloon die de modules bevat. 24

25 Programmeren Tijdens het ontwikkelen van een programma doe je er goed aan het programma altijd alleen te koppelen aan een bestand. Zodoende blijft Excel schoon van programma s en coderegels die nog niet klaar zijn en kun je het programma gemakkelijker meenemen naar andere (werk)locaties om verder te ontwikkelen. Stap 4: Interface Hoe moet je programma er voor de gebruiker uitzien? Dit noemen we de interface. Maak een schets van het venster dat je aan de gebruiker wilt aanbieden en bedenk passende namen voor de elementen en objecten die je daarin gaat gebruiken. Het voorbeeld van de hypotheekrekenmachine hiervoor zou tot een ontwerp als in figuur 4.1 kunnen leiden. Figuur 4.1 Voorbeeld van een interface voor de gebruiker Stap 5: Algoritmen Maak een schema van alle dingen die het programma moet doen als je een knop, optie of ander element in de interface gebruikt. Begin het algoritme te schrijven in pseudocode (een soort instructies, maar nog geen echte programmeercode). Deze pseudocode kun je later als commentaar in je programma opnemen. Denk vooral goed na over de kritische algoritmen in je programma waar het echte werk plaatsvindt. Voorbeeld van een algoritme in pseudocode van een stukje van het programma dat je zou kunnen maken voor het hypotheekberekeningsformulier (zie figuur 4.1): De gebruiker heeft op de knop [Verder] geklikt. Controleer dan of alle verplichte vakken zijn ingevuld. ALS fout DAN: Melden aan de gebruiker (liefst alleen over wat nog niet is ingevuld). ANDERS: Ga verder naar de volgende pagina. 25

26 Programmeren Stap 6: Schrijven van het programma Nu begint het programmeren. Daarbij komt het natuurlijk op de punten en komma s aan. In ieder geval moet je zorgen voor een goede naamgeving van alle objecten en variabelen in je programma. Zorg ook voor commentaar zodat anderen of jij zelf de code (later) nog begrijpen. Het programma is feitelijk de samenhangende verzameling van objecten, variabelen en instructies die het werk uitvoeren dat je in fase 1 hebt vastgesteld. Stap 7: Testen van het programma Test de grenzen van de programmavariabelen, de vakken waarin de gebruiker kan invoeren, probeer alle verschillende volgordes van klikken op de knoppen in je interface uit, enzovoorts. Voorspel welke uitkomst het programma moet geven en controleer dat. Laat vooral ook anderen (de potentiële gebruikers) je programma testen! Maak je programma dombo-proof en foutvrij (bug free) Stap 8: Opleveren van het programma Stel het uiteindelijke programma ter beschikking aan de gebruikers. Deze moeten dan kunnen vaststellen dat het programma aan de program requirements uit stap 1 voldoet. Vergeet niet het programma te documenteren en/of een handleiding te maken. Dat laatste kan een document zijn (op papier), maar ook een helpfunctie die je in het programma hebt ingebouwd. Leiderschapsvaardigheden Leer strategisch denken en word een betere leider Download ebooks 26

27 Programmeren De praktijk laat zien dat veel programmeurs vooral als zij een klein programma schrijven meteen met stap 6 (schrijven) beginnen. Een goede probleemverkenning (fase 1) en het bedenken van adequate algoritmen (fase 5) zijn echter ook nodig: het voorkomt dat je tijdens het programmeren wordt opgescheept met onnodig extra werk. Voor het volgende voorbeeldje mag je je even conformeren aan de praktijk: je hoeft alleen de code maar te schrijven. Figuur 4.2 Nieuwe module Begin een nieuwe lege werkmap. Schakel direct over naar de VBA-editor (via tab Ontwikkelaars, knop Visual Basic, maar toetscombinatie [Alt]+[F11] is sneller). Klik in de standaardwerkbalk onder het menu op het keuzepijltje van de tweede knop en open een nieuwe module. Typ in het modulevenster de volgende code: Sub Welkom() MsgBox "Hallo Wereld!" End Sub Zorg dat je tekstinvoegpunt ergens binnen de subroutine staat en laat de sub uitvoeren (bijvoorbeeld met [F5] of het knopje op de werkbalk). In je werkblad verschijnt een dialoogvenstertje. Figuur 4.3 Met deze tekst begint elke programmeur 27

28 Programmeren 4.3 OBJECTEN VBA-projecten gebruiken objecten die zijn voorzien van programma-instructies. Laten we daar eens wat nauwkeuriger naar kijken. Beschrijf een object eens als een ding met een bepaald doel, bijvoorbeeld een deur. Zo n ding heeft bepaalde kenmerken, zoals de kleur of het materiaal waar het van is gemaakt. De deur kan ook bepaalde dingen doen, bijvoorbeeld open gaan. Dat gebeurt als iemand de deurkruk omlaag doet. In feite is de deur een object met eigenschappen en methoden. Eigenschappen bepalen hoe een object er uitziet, methoden bepalen wat een object kan doen. Een methode wordt actief als er iets gebeurt waar het object op moet reageren: een gebeurtenis (event). Hoewel er heel veel verschillende deuren bestaan qua kleur, soort materiaal en grootte, herkent iedereen zo n ding als een deur. Kennelijk bestaat er een soort basismodel voor deuren: we kunnen dat de klasse van deuren noemen. Het klasse-object deur kent eigenschappen zoals kleur en grootte en bijvoorbeeld methoden als open, dicht of afgesloten. Dit kan voor elke deur gelden. Op het verschijnsel klasse komen we nog uitgebreid terug EIGENSCHAPPEN EN METHODEN In Windows-programma s worden veel objecten gebruikt zoals knoppen en keuzelijsten. Veel vensters en de handelingen daarin lijken op elkaar, dus als je een programma voor het eerst gebruikt weet je blindelings hoe je een venster groter of kleiner moet maken (dat is een methode). Maar ook minder direct waarneembare objecten komen voor in Windowsprogramma s: in Excel is bijvoorbeeld iedere cel, maar ook een cellenreeks of een heel werkblad, een rijnummer of kolomletter waarop je kunt klikken, een object dat bepaalde eigenschappen en methoden heeft. Denk aan eigenschappen als kleur, notatie, lettertype van de tekst, inhoud verborgen of beveiligd, en aan methoden als wissen, verplaatsen of activeren. Ook een Excel-werkmap als geheel is een object. Eigenschappen van dit object zijn bijvoorbeeld de maker en de bestandsnaam. En ook een lettertype is een object met naam, grootte, kleur en weergave als eigenschappen. Een voorbeeld van object-georiënteerd werken in Excel: wat doe je precies als je een label in een cel vet maakt? 1. Je selecteert de cel met het label (event). 2. De geselecteerde, actieve cel krijgt een omranding (reactie van een object op een event). 3. Je klikt op de Vet-knop (nog een event). De knop ziet er ingedrukt uit (methode). 4. Dit maakt de tekst in de cel vet (methode van de knop die de eigenschap van de cel verandert). Nog een voorbeeld over eigenschappen, methoden en gebeurtenissen. In de figuur hieronder staan drie knoppen (objecten), met elk in ieder geval één eigenschap: het opschrift (caption). 28

29 Programmeren Figuur 4.4 Enkele opdrachtknoppen De programmeur van deze command buttons (opdrachtknoppen) heeft ze bijvoorbeeld als volgt geprogrammeerd: De eerste knop heeft geen methode, er zijn geen instructies toegevoegd aan deze knop, dus die doet verder niets. De tweede knop reageert normaal op het klikken op de knop (je ziet dan de knop ingedrukt worden). De derde knop reageert ook ergens op, maar niet op het indrukken van de knop. Hij reageert als de muiswijzer in de buurt van de knop komt (en laat dan bijvoorbeeld een melding zien). Communicatieve vaardigheden Leer effectief communiceren Download ebooks 29

30 Programmeren De belangrijkste voordelen van programmeren met objecten: Er zijn veel standaardobjecten beschikbaar in de programmeeromgeving die je niet zelf hoeft te programmeren. Je hoeft niet steeds opnieuw een object te ontwerpen en van code te voorzien. Je kunt bestaande (aangepaste standaard)objecten ook in andere projecten gebruiken. In je programma s zie je alleen je eigen programmeerinstructies en niet de code die verantwoordelijk is voor standaardeigenschappen en methoden van de objecten. Je programmeert in principe stapsgewijs. Je kunt knop voor knop, object voor object werken zodat je je programma stap voor stap opbouwt OBJECT-GEORIËNTEERD Elke Office-toepassing dus ook Excel bestaat technisch gezien uit een verzameling van objecten waarmee je rekenmodellen kunt maken. Die objecten hebben eigenschappen en methoden waarmee je de rekentaken (en bijbehorende handelingen) kunt uitvoeren. Al die eigenschappen en methoden kun je via VBA benaderen. De objecten met hun eigenschappen en methoden zijn te vinden in het Objectenoverzicht van de VBA-editor (daar komen we later op terug). Er zijn heel wat objecten, eigenschappen en methoden. Enkele voorbeelden: het Applicationobject (dat is het programma Excel zelf), het Range- en Selection-object (geselecteerde cellen) en het Workbook-object. Het Application-object heeft bijvoorbeeld als eigenschap Application.ActiveSheet die de naam van het huidige werkblad bevat, en als methode Application.Quit die Excel afsluit. In VBA kun je de inhoud van de eigenschap van een object opvragen of veranderen. Het volgende programmaatje in VBA-code laat zien hoe je de naam van het actieve werkblad in een werkmap opvraagt, in een tekstvariabele stopt en in een venstertje laat zien. Sub BladNaam() Dim Bnaam As String Bnaam = Application.ActiveSheet.Name MsgBox Bnaam End Sub 30

31 Programmeren Je gebruikt in zulke instructies de zogenaamde punt-notatie Objectnaam.Eigenschapnaam (ook voor methoden). Om erachter te komen welke eigenschappen en methoden (en eventueel nog parameters of attributen) bij een object horen, kun je gebruikmaken van het Objectenoverzicht. Toen je de code aan het intypen was, zul je overigens gemerkt hebben dat de VBA-editor je behulpzaam wil zijn bij je keuze voor eigenschappen en methoden, want door het intypen van de punt in een instructie laat VBA alleen de mogelijkheden zien die horen bij de instructie die ervoor staat. Dit wordt hinting genoemd. Neem de nieuwe subroutine over in je huidige modulevenster (zie ook figuur 4.5). Laat de sub uitvoeren (bijvoorbeeld met [F5] of het knopje op de werkbalk). Mocht je tekstinvoegpunt buiten de module staan die je uit wilt voeren, bijvoorbeeld een paar regels eronder, dan komt Excel met een venster waar de subs in een lijstje staan als... macro s. Selecteer dan de gewenste macro en klik op [Uitvoeren] (of dubbelklik de macronaam in de lijst). Figuur 4.5 Welke subprocedure laat je uitvoeren? In je werkblad verschijnt als het goed is een dialoogvenstertje met de naam van het werkblad. 31

32 Programmeren Figuur 4.6 Bladnaam teruggemeld in een dialoogvenster 4.4 PROGRAMMASTRUCTUREN In de ontwikkeling van je projecten is het nodig om algoritmen op te stellen om je programma te laten doen wat ervan wordt verwacht. Je zet je algoritmen in stukjes programma om (subroutines) en je koppelt die aan de objecten die je gebruikt. Dat is dan het uiteindelijke schrijven van het programma. Je keuze van algoritmen en objecten bepaalt de structuren in je programma. Time management Tips om je tijd effectiever te gebruiken! Download ebooks 32

33 Programmeren De volgende situaties kom je steeds weer tegen: Opeenvolging: het achtereenvolgens uitvoeren van handelingen. Herhaling: het steeds opnieuw uitvoeren van (een bepaalde reeks) handelingen. Keuze: de uitvoering van handelingen laten afhangen van een keuze. Splitsing: de handelingen opsplitsen in delen OPEENVOLGING Opeenvolging van commando s is de normale manier om instructies uit te voeren. In de volgende programmaregels worden de opdrachten netjes achter elkaar uitgevoerd. Naam = txtnaam.text Voornaam = txtvoornaam.text HeleNaam = Voornaam & " " & Naam et cetera In dit geval wordt eerst de naam die iemand die in een tekstveld txtnaam heeft ingevoerd, in de variabele Naam gezet. Daarna wordt de voornaam (uit een ander tekstveld) aan de variabele Voornaam toegekend en vervolgens wordt de variabele HeleNaam gevuld met Voornaam, een spatie ( ) en Naam. Variabelen zijn erg belangrijk in programma s, zoals je merkt, ze komen dan ook nog uitgebreid aan bod HERHALING Een simpele manier van het herhalen van werkzaamheden (bijvoorbeeld Schrijf 100 strafregels ) programmeer je in VBA via een For-Next-lus. Sub StrafRegels() For Aantal = 1 To 100 ActiveCell.FormulaR1C1 = "Ik mag niet gamen onder informaticales" ActiveCell.Offset(1, 0).Range("A1").Select Next Aantal End Sub Achter For komt een teller en de startwaarde voor die variabele, achter To komt de eindwaarde. Aan het eind van de instructies die moeten worden herhaald, staat het verplichte woord Next, dan wordt de teller verhoogd en worden de instructies tussen For en Next herhaald. En zo maar door totdat de teller de eindwaarde bereikt heeft. Op dergelijke programmastructuren komen we later nog terug. 33

34 Programmeren KEUZE Door een keuzemogelijkheid in je algoritme kun je dit soort handelingen uitvoeren: ALS een voorwaarde waar is DAN moet je dit doen, ANDERS moet je dat doen, of in het Engels: IF condition is true THEN do this, ELSE do that. Dat kan de volgende complexe IF-THEN-ELSE constructie opleveren in VBA: If Temperatuur > 20 And FanAan = False Then FanAan = True ElseIf Temperatuur < 10 Then ZetVerwarmingHoog Else ZetVerwarmingLaag Else If FanAan = True Then FanAan = False End If Om zeer complexe of veel herhaalde IF-constructies te vermijden kun je ook een constructie met Select Case gebruiken. Ook hierop komen we verderop terug SPLITSING Voor het opsplitsen van werkzaamheden in onderdelen maak je in VBA gebruik van subprocedures en functies. Als een knop moet reageren op een muisklik van de gebruiker, wordt door VBA zelf een subprocedure gegenereerd. Dat had je intussen waarschijnlijk al begrepen. Sub Procedure()...reeks instructies... End Sub Aan een subprocedure kun je waarden meegeven die vertellen wat er moet worden gedaan, of waarmee moet worden gerekend, bijvoorbeeld: Sub RekenTijd(Uur As Integer, Minuut As Integer, Seconde As Integer)...instructies die met drie getallen een tijd berekenen... End Sub Een functie lijkt op een subprocedure, maar er is een verschil: een functie levert altijd een waarde op die teruggegeven wordt aan het programma. Een voorbeeld: 34

35 Programmeren Function BerekenBTW(Bedrag As Double) as Double BerekenBTW = Bedrag * 21% End Function Je ziet in de opdracht tussen Function en End Function nog een keer de naam van de functie staan: daar wordt bepaald welke waarde de functie terug moet geven aan het hoofdprogramma. In de eerste regel moet je aangeven wat voor soort variabele de functie als waarde teruggeeft. Functies gebruik je als je in je programma vaker eenzelfde berekening of bewerking nodig hebt. 4.5 VARIABELEN Een variabele is een gereserveerd stukje intern geheugen met een naam waarin een programma veranderlijke gegevens neerzet. Variabelen heb je in je programma s nodig om bijvoorbeeld berekeningen uit te voeren, lussen af te werken of instellingen te realiseren. De waarden van variabelen kunnen ingevoerd zijn door de gebruiker, maar ook opgehaald uit een cel of berekend met een formule. Leiderschapsvaardigheden Leer strategisch denken en word een betere leider Download ebooks 35

36 Programmeren Bij het declareren van variabelen moet je behalve de naam ook opgeven wat het type van de variabele is, bijvoorbeeld Tekst, Getal of Datum. Als je dat nog niet precies weet, mag je ook het type Variant kiezen (maar dat kost meer geheugenruimte en kan in onverwachte typen resulteren). Maak er een (goede) gewoonte van om in VBA alle variabelen expliciet te declareren, door in je modules aan het begin de instructie Option Explicit op te nemen, nog voor de eerste subprocedure. Een variabele declareer je als volgt: Dim <variabelenaam> As <variabeletype> In principe mag je zelf weten hoe je je variabelen noemt, maar kies toch zoveel mogelijk logische of begrijpelijke namen. Andere mensen kunnen jouw programma dan beter begrijpen en ook voor jezelf is dat handig als je (veel) later weer eens iets aan je programma wilt veranderen. Variabelen kun je nodig hebben op een bepaalde plaats in je programma. Dan declareer je ze lokaal in een subprocedure of functie. Als je ze door je hele programma heen wilt kunnen gebruiken, moet je ze aan het begin van je programma declareren in de sectie Algemeen (nog vóór de eerste sub of functie). Naast variabelen kunnen ook constanten, dus met een vaste berekeningswaarde, een rol spelen in je programma. En ook een array, wat in feite een matrix met variabelen is, kan handig zijn in je programma. We bespreken dit nader als het van toepassing is. 4.6 COMMENTAAR Een door jou geschreven programma moet ook te begrijpen zijn door andere programmeurs. Daarvoor voorzie je de programmacode van commentaar. Dat commentaar is trouwens ook voor jezelf nuttig. Vaak weet je na enige tijd niet meer waarom je voor een bepaalde constructie of instructie hebt gekozen. In VBA kun je losse commentaarregels opnemen, maar ook commentaar toevoegen aan het eind van de coderegels die je typt. In onderstaand voorbeeld zie je een functie die zo op enkele plekken van commentaar is voorzien (de groene tekst). 36

37 Programmeren Function BerekenBTW(Bedrag As Double) as Double 'Berekent het btw bedrag, hoog tarief 'Invoer: het bedrag waarover de btw moet worden berekend Dim BTWPercentage as Double BTWPercentage = 0,21 BerekenBTW = Bedrag * BTWPercentage 'Btw hoog tarief! End Function Commentaar wordt voorafgegaan door een enkel aanhalingsteken. De tekst van het commentaar wordt tijdens het uitvoeren van het programma genegeerd door VBA. Het dient alleen als documentatie voor je programma. De tweede en derde regel in het voorbeeld hierboven bevatten geen programmacode en bestaan alleen uit commentaar. In een regel verderop wordt de code gevolgd door een kort stukje commentaar dat betrekking heeft op de code op dezelfde regel. Je kunt bijvoorbeeld in het commentaar aan het begin van een subprocedure de volgende onderwerpen documenteren: Een omschrijving van een of twee regels van de functie van de subprocedure, dus wat de subroutine doet. De variabelen die dienen als invoer. De uitvoervariabelen. Daarnaast zet je achter regels code die niet voor zichzelf spreken een kort commentaar van een of meer woorden. In dit werkboek gebruiken we om de code leesbaar te houden, ook lege regels. Met lege regels maken we zichtbaar welke blokken code bij elkaar horen. Lege regels worden door VBA genegeerd. Wees niet te zuinig met commentaar. Je kunt beter te veel dan te weinig commentaar gebruiken, zodat je later niet hoeft te puzzelen om te achterhalen wat een stukje code nu precies doet. Om je programma s te kunnen ontwerpen en bouwen werk je met de VBA-editor die in elke Office-toepassing zit. We gaan in het volgende hoofdstuk dieper in op die ontwikkelomgeving: de Visual Basic-editor in Excel en de mogelijkheden daarin. Daarna gaan we écht programmeren en komen alle hier genoemde begrippen en onderwerpen nog uitgebreid aan bod. 37

38 De VBA-editor 5 DE VBA-EDITOR 5.1 INLEIDING VBA-programma s worden projecten genoemd. Ze worden gebouwd in de Visual Basic for Applications-editor van Microsoft Office. Het venster van de VBA-editor doet een beetje ouderwets aan, omdat de interface nog is ingericht zoals in oudere Windows-programma: je vindt bovenin een menu met submenu s, en werkbalken met knoppen. In dit hoofdstuk nemen we de belangrijkste onderdelen en elementen van deze editor met je door. 5.2 WAT ZIE JE IN HET VENSTER Voordat we aan de slag gaan met het maken en bewerken van VBA-projecten, is het nuttig om even te stil te staan bij de diverse onderdelen in het venster van de editor. Open een nieuwe lege werkmap, en schakel direct over naar de VBA-editor (toetscombinatie [Alt]+[F11] brengt je er het snelst). Communicatieve vaardigheden Leer effectief communiceren Download ebooks 38

39 De VBA-editor Figuur 5.1 Basisvenster van de VBA-editor In de figuur hierboven zie je alle elementen en panelen van de VBA-editor die standaard bij eerste activering in beeld zijn (met uitzondering van het werkbalkje Foutopsporing in de rechterbovenhoek te zien in de vorm van een palet dat we in een eerdere opdracht hebben geactiveerd). Merk op dat de knop uiterst links in de standaard werkbalk het logo van Excel bevat. Deze knop brengt je terug bij het programma zelf (in dit werkboek is dat Excel). Als je de VBAeditor start vanuit een ander programma, bijvoorbeeld Word of PowerPoint, dan vind je op die plaats het logo van die programma s. Je zult waarschijnlijk wel even moeten wennen aan het werken met menu s en werkbalkknoppen, in plaats van met het lint. Maar het is niet per se moeilijker, dus daar kom je wel uit. Knoppen op werkbalken zijn altijd een andere (snellere) manier om bepaalde menuopties (met bepaalde instellingen) uit te voeren. Ze geven in ieder geval bij aanwijzen een uitlegkadertje waarin te lezen is wat hun functie is. In de submenu s kun je zien welke sneltoetsen je allemaal mag gebruiken in plaats van de menuopties. 39

40 De VBA-editor Zo zijn er dus vaak drie manieren om een bepaalde handeling uit te voeren: via het menu (altijd mogelijk), met een sneltoets, of met een knop op een werkbalk. Niet alle menuopties kennen een sneltoets, een knop, of allebei. Welke werkwijze je zelf het handigst vindt, is een persoonlijke keuze. Sommige VBA-programmeurs doen alles met sneltoetsen, en gebruiken zelden een knop of menuoptie. Dat heeft overigens ook iets te maken met het feit dat je je code intypt en je dus je handen al op het toetsenbord hebt liggen. Laten we even een paar simpele handelingen uitvoeren om je aan de interface van de VBAeditor te laten wennen. Sluit het vensterpaneel Eigenschappen met het sluitknopje rechtsboven in het paneel. Sluit ook het vensterpaneel van de Projectverkenner. Laat het Eigenschappen-paneel weer verschijnen via de standaardwerkbalk. Breng ook de Projectverkenner weer in beeld, maar nu met behulp van de sneltoets (eerst opzoeken via het menu Beeld of in het uitlegkadertje van de werkbalkknop). Activeer ook de andere vensterelementen uit menu Beeld, en de verschillende werkbalken, en zie waar ze zoal opduiken. Figuur 5.2 Meer vensterelementen 40

41 De VBA-editor De vensterpanelen Direct, Lokale variabelen en Controle worden onderaan geplaatst en de werkbalkjes verschijnen in het venster als zwevende paletten. Het kan dus een drukke boel zijn in de editor, en dat gaat allemaal ten koste van de ruimte waar je uiteindelijk je code kunt typen. Laten we al deze elementen nu nog maar even uit de weg ruimen, we komen erop terug als dat nodig is. Sluit de werkbalken Bewerken en UserForm, en ook de drie vensterpanelen onderaan (zodat de situatie van figuur 5.1 overblijft). Versleep met behulp van de titelbalk het werkbalkpalet Foutopsporing naar een positie naast de standaard werkbalk. Let op: de vorm van de balk verandert dan (zie figuur 5.3) Figuur 5.3 Werkbalk verplaatsen De puntjes die aan de rechterkant van een werkbalk staan, worden de handle genoemd. Daarmee kun je de balk verplaatsen binnen het gebied met de menu s en balken, of daarbuiten weer zwevend maken (als palet weergeven dus). Time management Tips om je tijd effectiever te gebruiken! Download ebooks 41

42 De VBA-editor 5.3 WERKVENSTERS Het grootste (lege) deel van het venster van de VBA-editor kun je vullen met werkvensters, waar het eigenlijke werk moet gebeuren. Er zijn verschillende werkvensters: Module- of codevenster Hier staat de code die moet worden uitgevoerd in subroutines of functies bij elkaar. Je kunt code zelf intypen, of de code verschijnt er bij de opname van macro s. Ook een combinatie is mogelijk: eerst opnemen en dan code toevoegen. Klassemodulevenster Vergelijkbaar met een normaal modulevenster, maar bedoeld voor het ontwerpen van klassen. Formuliervenster Voor het ontwerpen van formulieren en dialoogvensters. Ze worden VBA UserForms genoemd, en ze kunnen voorzien worden van allerlei besturingselementen zoals opdrachtknoppen, keuzerondjes, keuzelijsten, et cetera. Objectenoverzicht Een bibliotheek waar alle beschikbare objecten met hun eigenschappen en methoden terug te vinden zijn. Figuur 5.4 De werkvensters in beeld In figuur 5.4 hierboven zijn de genoemde werkvensters in beeld gebracht. Zie in de titelbalken hoe ze worden genoemd, en kijk ook in de Projectverkenner in het vensterpaneel links waar je ze in de structuur van het project kunt terugvinden. 42

43 De VBA-editor Mochten er vensters met code op een bepaald moment niet (goed) in beeld zijn, dan kun je ze in die Projectverkenner activeren door er dubbel op te klikken. Figuur 5.5 Wat wil je zien in de VBA-editor? En via het paneelwerkbalkje boven de onderdelen in het project kun je ook nog tussen bepaalde weergaven wisselen, bijvoorbeeld tussen object of code. Je zult een en ander nog tegenkomen in het vervolg van dit werkboek! Leiderschapsvaardigheden Leer strategisch denken en word een betere leider Download ebooks 43

44 Code genereren 6 CODE GENEREREN 6.1 INLEIDING Programmeren is een vak, en daarvoor is niet iedereen in de wieg gelegd. Maar dit werkboek is ook niet bedoeld om je op te leiden tot programmeur. We laten je zien hoe met behulp van enkele slimmigheidjes en ingebouwde hulpmiddelen bepaalde taken binnen Excel zijn te automatiseren, en hoe je nog wat extra functionaliteit kunt toevoegen aan het rekenbladprogramma. Daardoor kun je in de praktijk handiger en sneller met het programma werken. 6.2 OPNEMEN We beginnen dit hoofdstuk nog eens met het opnemen van een macro, want dat scheelt niet alleen een heleboel typewerk, maar voorkomt ook dat je op moet gaan zoeken welke instructies je allemaal nodig hebt en hoe die precies moeten worden geformuleerd. Doe de onderstaande opdrachten nauwkeurig mee. Begin met een nieuwe werkmap (sluit eventueel andere). Activeer de VBA-editor ([Alt]+[F11]). Zet beide vensters in Windows naast elkaar in beeld. Ga in het venster van de werkmap naar tab Ontwikkelaars, schakel de optie Relatieve verwijzingen gebruiken in, en start een nieuwe macro-opname. Geef de macro de naam WerkWeek (in deze werkmap opslaan), ken er de sneltoets [Ctrl]+[w] aan toe, en geef als beschrijving: Plaatst de werkdagen in een cellenbereik. Klik op [OK], maar voer nog even geen handelingen uit in het werkblad! Activeer het venster van de VBA-editor, en open in de Projectverkenner links Module1 in de map Modules (dubbelklikken). Het werkvenster verschijnt in beeld, zorg dat je het zo maximaal mogelijk ziet (je mag het zelfs maximaliseren). In dit venster zul je zien welke code in je opname wordt gegenereerd. Schakel weer over naar het werkblad in Excel, en voer in cel A1 (dat is je actieve cel) via de formulebalk het tekstlabel Maandag in (gebruik het vinkje in de formulebalk zodat je je celwijzer niet nog eens hoeft te verplaatsen). Zie wat er in je modulevenster aan code verschijnt. Voer met behulp van de vulgreep de andere vier werkdagen van de week door in de reeks A1:A5. De code die dat oplevert in je modulevenster had je vast (nog) niet zelf bedacht. De reeks is na het doorvoeren meteen geselecteerd. Ken aan de cellenreeks de volgende opmaakkenmerken toe: Vet en Rechts uitgelijnd. 44

45 Code genereren Mocht je tijdens het opnemen van je macro een foutje maken, dan kun je gewoon de handeling ongedaan maken en wordt de bijbehorende code gewist in het modulevenster. Probeer dat maar eens even met een van de toegekende opmaakkenmerken. Maak de kolom passend voor de breedste werkdag, en selecteer de cel naast Maandag (want daar wil je waarschijnlijk dan verder gaan werken in je model). Stop de opname. Figuur 6.1 Code gegenereerd tijdens marco-opname Je zou nu de code moeten hebben gegenereerd zoals rechts in figuur 6.1 hierboven. Behoorlijk wat regels zou je waarschijnlijk zelf niet hebben bedacht, maar Excel zet ze er neer omdat dat instellingen voor je cellenbereik zijn. Merk op dat aan het eind van de regel die het doorvoeren regelt Selection.AutoFill een spatie + een underscore _ forceert dat de (lange) instructie op de volgende regel doorgaat. Je kunt die afbreekcode altijd plaatsen als je instructie niet op één regel past, en mocht je daarvoor niet de juiste positie hebben gekozen, dan krijg je vanzelf een foutmelding. Selecteer een andere cel in het werkblad. Plaats in de VBA-editor een onderbrekingspunt op de eerste regel van de subprocedure (zoals je al eens deed in hoofdstuk 3). Voer de macro nu stap voor stap uit (begin met [F5] en stap steeds verder met [F8]). Je ziet bij elke regel die wordt uitgevoerd, wat dat in het werkblad als resultaat geeft. Met uitzondering natuurlijk van een behoorlijk aantal instructies in de programmaconstructie With Selection... End With. Behalve een actie naar aanleiding van de instelling van de eigenschap.horizontalalignment = xlright, gebeurt er met de overige instellingen niets. Die instructies zou je dus in principe kunnen verwijderen. 45

46 Code genereren 6.3 CODE BEWERKEN De code in je modulevenster mag je natuurlijk gewoon bewerken, dus is het verwijderen van de overbodige instructies geen probleem. Je kunt (mogelijk) overbodige regels ook voorlopig even markeren als commentaar door er een apostrof voor te typen zodat ze door Excel bij het uitvoeren van de macro worden genegeerd. Doe dat als je niet helemaal zeker weet of je programma nog wel goed zal worden uitgevoerd na het verwijderen van regels. Verwijder de overbodige regels uit de With Selection... constructie. Voer de macro nogmaals uit (liefst stap voor stap zodat je ziet wat er gebeurt). Is het resultaat hetzelfde? Zo niet, heb je dan niet te veel gewist (maak eventueel een en ander ongedaan)? De constructie met With is natuurlijk erg handig als je meerdere eigenschappen wilt instellen voor de selectie, maar als alleen het rechts uitlijnen moet gebeuren, is een éénregelig alternatief overzichtelijker: Communicatieve vaardigheden Leer effectief communiceren Download ebooks 46

47 Code genereren Selection.HorizontalAlignment = xlright is namelijk hetzelfde als: With Selection.HorizontalAlignment = xlright End With Vergeet in beide varianten de punt aan het begin van de eigenschap niet, anders krijg je een foutmelding. Buiten de constructie met With staat nóg een instelling voor de selectie, namelijk die voor het vet maken van het lettertype van de labels. Je zou er voor kunnen kiezen om die binnen de With-constructie te halen, want dat kan ook (let goed op de punten): With Selection.Font.Bold = True.HorizontalAlignment = xlright End With Pas je code aan zoals hierboven en test de macro. Bewaar je werkmap (met macro s) met de naam Werkdagen. Je hebt nu in je werkmap een overzichtelijk stukje programmacode opgeslagen dat je als macro kunt laten uitvoeren. Maar we gaan er nog wat interactie met de gebruiker aan toevoegen: in een dialoogvenster gaan we vragen met welke dag de reeks moet beginnen. Voeg de twee coderegels toe die hieronder in het rood zijn weergegeven. Die komen dus nog vóór de instructie dat de tekst in de eerste cel moet verschijnen. Vervang in de regel die de eerste cel vult, de tekst "Maandag" door de variabele txtdag die met behulp van de InputBox wordt opgehaald bij de gebruiker. 47

48 Code genereren Sub WerkWeek() ' ' WerkWeek Macro ' Plaatst de werkdagen in een cellenbereik ' ' Sneltoets: Ctrl+w ' Dim txtdag As String txtdag = InputBox("Wat is de eerste werkdag?", "Instellingen") ActiveCell.FormulaR1C1 = txtdag Selection.AutoFill Destination:=ActiveCell.Range("A1:A5"), Type:= _ xlfilldefault ActiveCell.Range("A1:A5").Select With Selection.Font.Bold = True.HorizontalAlignment = xlright End With ActiveCell.Columns("A:A").EntireColumn.EntireColumn.AutoFit ActiveCell.Offset(0, 1).Range("A1").Select End Sub De eerste ingevoegde regel is de declaratie van een variabele die je nodig hebt om datgene wat de gebruiker gaat intypen in het dialoogvenster de inputbox in de tweede regel in op te slaan. Wat in die variabele is bewaard, wordt in de regel daarna ingevoerd als begintekst voor de verdere procedure. Verderop gaan we nog uitgebreid in op het gebruik van variabelen. Voer de subprocedure opnieuw uit ([F5]). Zie dat het invoervenstertje verschijnt met de titel en de vraag: vul dan een dag in naar keuze. Klik (in de invoerbox) op [OK]. Als je je onderbrekingspunt nog hebt staan in de code, zal het programma nu weer even wachten. Druk dan nogmaals op [F5] om de code verder uit te laten voeren. Haal het onderbrekingspunt daarna weg ([F9] of klik op het bolletje). Uiteindelijk verschijnen in het werkblad de dagen doorgevoerd vanaf je opgegeven eerste dag. 48

49 Code genereren Figuur 6.2 Invoer door de gebruiker Op zich is dit natuurlijk heel fraai, maar je weet nooit wat de gebruiker in het invoervak zal gaan typen. Eigenlijk is elke invoer mogelijk, en dat betekent dat wat er wordt doorgevoerd afhankelijk is van wat je hier als eerste tekst intypt. En je weet natuurlijk al hoe dat doorvoeren van reeksen werkt als je het werkboek Geavanceerde opties en technieken in deze serie hebt doorgenomen. Time management Tips om je tijd effectiever te gebruiken! Download ebooks 49

50 Code genereren Voer de procedure nog een paar keer uit met als input: vr (als afkorting van vrijdag), product1, kwartaal1 en januari. Probeer het ook nog even met de tekst snipperdag of een plaats als Rotterdam. Let ook goed op wat er steeds met de kolombreedte gebeurt. Vooropgesteld dat je dit soort zaken op bepaalde manieren kunt afvangen voordat de instructies in het programma verdergaan, is het handiger om een en ander van tevoren al te beperken. Dat kan bijvoorbeeld met een formulier waarin je de (volledige) regie van de interactie in handen kunt nemen. 6.4 FORMULIEREN Een VBA-project kan naast (meerdere) modules ook formulieren bevatten. Een formulier heeft vele eigenschappen en (besturings)elementen en er kan allerlei programmacode gekoppeld zijn aan zowel het formulier als aan de elementen erop. Zo kun je heel gebruiksvriendelijke dialoogvensters maken. Maar dat vergt ook nog heel wat programmeerwerk. Laten we eens kijken wat we met een formulier allemaal kunnen regelen. Voeg via de keuzeknop op de werkbalk een UserForm toe aan het project. Verander in het vensterpaneel Eigenschappen de naam van het formulier in frminstellingen (wordt in de Projectverkenner meeveranderd) en de Caption in Instellingen (die verschijnt in de titelbalk van het formulier). Figuur 6.3 Nieuw formulier 50

51 Code genereren Het formulier is binnen VBA een klasse-object. Het is mogelijk om aan zo n object andere objecten te koppelen. Zo kun je op het formulier bijvoorbeeld een opdrachtknop plaatsen zoals we in de volgende opdracht demonstreren. Zorg dat de Werkset met besturingselementen handzaam in de buurt staat (in figuur 6.3 hebben we die naast het formulier gezet). Deze set verschijnt als je het formulier actief maakt (mocht dit niet het geval zijn, klik dan op de knop Werkset in de werkbalk). Teken onderaan een opdrachtknop op het formulier: klik de bewuste knop in de werkset aan en sleep een rechthoekige vorm op het raster van het formulier. Geef deze knop als naam cmduitvoeren en als Caption de tekst Werkdagenreeks plaatsen (in paneel Eigenschappen). Je kunt eventueel de knop breder maken als je tekst er niet in past. In dit boek laten we de namen van objecten beginnen met een code die het type object aangeeft. Daarom heeft de opdrachtknop de naam cmduitvoeren gekregen, en hebben we het formulier eerder de naam frminstellingen gegeven. Voor knoppen is de typeaanduiding cmd (van Command Button), voor een formulier frm (van Form). Zo kun je als je veel objecten gebruikt, gemakkelijker bepaalde objecten terugvinden. Men noemt dit ook wel de Hongaarse naamgeving. Dubbelkik op de opdrachtknop. Je komt terecht in een nieuw codevenster dat hoort bij het geselecteerde object. Plaats tussen de twee coderegels de instructie: Call WerkWeek. Zonder haakjes dus, sterker nog: als je ze zou typen, haalt Excel ze weg. Figuur 6.4 Opdrachtknop met code 51

52 Code genereren Objecten als deze men noemt ze meestal besturingselementen kennen allerlei eigenschappen waardoor het mogelijk is gebeurtenissen aan die objecten toe te kennen. Zo kun je bijvoorbeeld instellen wat er moet gebeuren als je bij de uitvoering van het programma op de opdrachtknop klikt. In het bovenstaande codevenster zijn bovenin twee keuzelijsten zichtbaar. De eerste bevat een lijst met objecten en de tweede een lijst met gebeurtenissen. Je bevindt je hier zoals je trouwens ook in de lijsten kunt zien in de subprocedure Private Sub cmduitvoeren_click(). Deze subprocedure is een Private Sub, en dus anders dan de subroutine WerkWeek() (waar het woord private ontbreekt). Die laatste wordt dan ook wel een public sub genoemd. Het verschil is dat de private sub alleen bruikbaar is binnen de module waarin hij is gedefinieerd, de public sub is ook vanuit andere modules aan te roepen. Dat laatste doe je met de instructie Call gevolgd door de naam van de public sub, zoals je in de opdracht hiervoor zag. Nu nog even zien of het werkt. Start de uitvoering van de code vanuit de private sub, oftewel: activeer het formulier. Dit wordt in beeld geplaatst in het werkblad. Klik op de knop [Werkdagenreeks plaatsen]. Je moet dan natuurlijk eerst weer je begindag typen. Laat nog een werkdagenreeks invoegen via de knop op het formuliertje. Leiderschapsvaardigheden Leer strategisch denken en word een betere leider Download ebooks 52

53 Code genereren Zolang het formulier in beeld is, wordt een nieuwe werkdagenreeks geplaatst in de kolom rechts naast de eerdere reeks. Dat komt omdat je in de sub WerkWeek de actieve celwijzer hebt verplaatst naar de cel naast de begindag. Tussendoor kun je niet even navigeren naar een andere cel in het werkblad. Daarvoor moet je het formulier eerst sluiten. Sluit het formulier Instellingen (via het standaard sluitknopje). Ga terug naar het ontwerpvenster van het formulier (dubbelklikken in de Projectverkenner is het handigst). Voeg er onderaan een knop cmdsluiten toe om het formulier te [Sluiten] (denk aan de caption). De instructie die je hierbij nodig hebt, luidt: Unload Me. Test het formulier met de twee knoppen. Zoals je in de Werkset kunt zien, zijn er diverse besturingselementen die je kunt gebruiken in je formulier. De meeste zul je ook wel kennen door je ervaring met dialoogvensters in allerlei programma s: vinkjes, rondjes, labels, tekst- en keuzevakken, en dergelijke. Laten we eens een paar van de mogelijkheden bekijken zodat je ziet hoe je die in het programma kunt opnemen. Om je begindag te bepalen kun je gebruikmaken van een tekstveld met een bijbehorend label. Maar dat heeft hetzelfde bezwaar als het gebruik van de inputbox hierboven: de gebruiker is dan namelijk geheel vrij in wat hij er invult. Hieronder gaan we daarom de keuze beperken tot alleen de dagen van de week. Figuur 6.5 Tekstlabel en keuzevak Plaats een label (Bijschrift ) bovenin het formulier zoals hierboven. Plaats rechts daarvan een combo-vak (combinatie Keuzelijst met invoervak ). Verander in het Eigenschappen-paneel de namen van de elementen in lbldagkeuze en cbodagkeuze, en stel bij de eerste ook de caption in als in bovenstaande figuur. 53

54 Code genereren We gaan verderop de methode AddItem gebruiken om de keuzelijst in het formulier van keuzemogelijkheden te voorzien. Maar dat wil je natuurlijk wel doen zodra het formulier wordt geopend, dus dit gaan we koppelen aan die gebeurtenis. Het formulier zelf is ook een object waarvoor bepaalde gebeurtenissen gelden. Zo kan het formulier een initialize event hebben, oftewel een gebeurtenis op het moment dat het formulier op het scherm verschijnt. Dat is een goed moment om bepaalde eigenschappen van objecten in te stellen. Maak de Private Sub UserForm_Initialize() aan in het codevenster van het formulier (dubbelklik indien nodig op een lege plek in het formulier om dat codevenster te openen). Je hoeft dat niet per se te typen, met behulp van de keuzelijsten bovenin is het ook te regelen, maar dan moet je eventuele overbodige code wel verwijderen. Figuur 6.6 Code bij openen formulier Zet in deze sub de code zoals in figuur 6.6 hierboven. Test het formulier. Zo, dat is geregeld: je hebt de gebruiker nu eerst laten weten dat je bepaalde zaken gaat instellen voor het formulier. Zoals je ziet wordt ondanks de locatie van de sub (als derde gedefinieerd) de procedure toch als eerste uitgevoerd, nog voordat het formulier verschijnt. Voor het gevoel van de meeste programmeurs is het prettiger als code die als eerste moet worden uitgevoerd ook bovenin het codevenster staat. Je mag het eventueel verplaatsen. Merk ook op dat in de code naar het formulier wordt verwezen met behulp van Me, want eigenlijk had hier moeten staan: frminstellingen.caption. Maar omdat deze subprocedure zich binnen het formulier afspeelt, is het niet nodig om het formulier bij zijn eigen naam te noemen. 54

55 Code genereren Met behulp van de volgende code zou je nu de keuzelijst kunnen vullen met de dagen van de week. ' Keuzelijst cbodagkeuze met waarden vullen frminstellingen.cbodagkeuze.additem "Maandag" frminstellingen.cbodagkeuze.additem "Dinsdag" frminstellingen.cbodagkeuze.additem "Woensdag" frminstellingen.cbodagkeuze.additem "Donderdag" frminstellingen.cbodagkeuze.additem "Vrijdag" frminstellingen.cbodagkeuze.additem "Zaterdag" frminstellingen.cbodagkeuze.additem "Zondag" Je zou ook hier naar de formuliernaam kunnen verwijzen met Me, en verder kun je veel codetekst kopiëren en plakken. Maar je kent ook al een andere manier om een en ander te noteren die veel overzichtelijker is: een contructie met With. Probeer eerst de volgende opdracht uit te voeren voor je verder leest in de tekst. Voeg de benodigde code toe in de sub UserForm_Initialize() om de keuzelijst te vullen met keuzeitems met behulp van een with-constructie. Test het formulier. Communicatieve vaardigheden Leer effectief communiceren Download ebooks 55

56 Code genereren Als het goed is, luidt je code ongeveer als volgt: With Me.cboDagkeuze.AddItem "Maandag".AddItem "Dinsdag".AddItem "Woensdag".AddItem "Donderdag".AddItem "Vrijdag".AddItem "Zaterdag".AddItem "Zondag" End With We gaan er nu voor zorgen dat de keuze uit de lijst wordt gebruikt in de procedure WerkWeek, in plaats van de invoer uit de inputbox. We kunnen daar de variabele txtdag voor gebruiken, door er de tekst van het gekozen item aan toe te wijzen met behulp van de volgende coderegel: txtdag = frminstellingen.cbodagkeuze.text Pas de code in de procedure WerkWeek() aan (de inputbox mag je verwijderen), en test het formulier nog eens. Let op: omdat je buiten het formulier bent getreden, kun je de formuliernaam nu niet meer aanroepen met Me! Zolang het formulier geopend is, gaat dat goed, want de waarde van de keuzelijst is dan beschikbaar. Maar het is wel handig als je het formulier sluit na het plaatsen van de reeks, zodat je bijvoorbeeld je celwijzer kunt verplaatsen naar een andere locatie waar je een nieuwe reeks wilt neerzetten. Om het formulier tegelijk te sluiten met de plaatsing van de lijst, moet je de code Unload me laten uitvoeren nadat de werkweek-routine is afgehandeld. Voeg de code om te sluiten toe aan de code voor knop cmduitvoeren. Het werkt nu allemaal heel aardig, maar je kunt in een keuzelijst met invoervak nog steeds typen. Dat kan handig zijn om bijvoorbeeld met behulp van de eerste letter(s) snel bij de dag van je keuze te komen. Maar het betekent ook dat andere willekeurige invoer mogelijk is, probeer maar. Met een wijziging van de eigenschap Style, kun je voorkomen dat deze lijst ook andere invoer toestaat. Zet de eigenschap Style op fmstyledropdownlist. Om die eigenschap te veranderen, moet het element in het formulier zijn geselecteerd. 56

57 Code genereren Figuur 6.7 Style van keuzelijst wijzigen Als het goed is kun je nu alleen nog maar items uit de lijst kiezen, al mag je wel alvast beginnen met typen. En zo zijn er dus heel wat dingen aan het formulier te regelen, denk ook aan welk element als eerste de focus moet krijgen, de volgorde van de tabstops (als je met de [Tab]-toets in een formulier navigeert), wat de functie is van de [Enter]-toets, et cetera. Neem nog maar eens goed de lijst met eigenschappen van de elementen door. Bewaar je werkmap (inclusief de code) nog even, als je meteen doorgaat met het volgende hoofdstuk, hoef je het bestand niet te sluiten. 57

58 Overzicht 7 OVERZICHT 7.1 INLEIDING Code genereren is één ding, het overzicht houden is een andere zaak. Maar ook erg belangrijk, want met al die subprocedures waarmee je van alles en nog wat moet regelen in je programma, kan het al gauw een aardige ratjetoe van codefragmenten worden. Gelukkig heeft de VBA-editor enkele hulpmiddelen die je bij het overzicht kunnen assisteren: zoals het venster Direct (waar ook hinting actief is), het paneel Controle en de objectenbrowser. Ook de reguliere foutopsporingsmethode is vaak een goede manier om het overzicht te behouden. Maar een goed overzicht begint al bij jezelf als programmeur: zorg dat je objecten (en ook variabelen) duidelijke namen geeft, zodat je weet wat ze zijn en moeten doen in je programma. Dus voor we in het volgende hoofdstuk verdergaan met programmeren, eerst nog even wat uitleg over dit soort kwesties. Time management Tips om je tijd effectiever te gebruiken! Download ebooks 58

59 Overzicht 7.2 HONGAARSE NAAMGEVING Omdat er bij object-georiënteerd programmeren veelvuldig moet worden verwezen naar de verschillende objecten, is het van belang dat je een goede naamgeving hanteert. Het is verstandig om gebruik te maken van de Hongaarse naamgeving. Deze methode houdt in dat ieder object een naam krijgt waarvan de eerste (meestal drie kleine) letters aangeven om wat voor type object het gaat, of waar het bij hoort. Daarachter komt de eigenlijke naam (die weer begint met een hoofdletter) die de functie van het betreffende object beschrijft. Figuur 7.1 Objecten in je formulier Open indien nodig het bestand Werkdagen, en ga direct naar de VBA-editor. Bekijk de linker keuzelijst in het codevenster van het formulier frminstellingen. Je ziet hier de elementen die je in het vorige hoofdstuk in het formulier hebt geplaatst, en als het goed is hebt voorzien van namen in Hongaarse notatie. Op deze manier kun je objecten gemakkelijker herkennen, terugvinden en met elkaar in verband brengen. De methode heeft bovendien het voordeel dat als je in het codevenster op de keuzelijst met objecten klikt, de objecten gesorteerd zijn weergegeven. Het is gebruikelijk om de Engelstalige benamingen van de objecten als lettercodes te gebruiken. In onderstaande tabel staat een lijst met naamgevingen voor een aantal veelgebruikte objecten. Object Vertaling Naamgeving Label Bijschrift lblnaam, labnaam Textbox Tekstvak txtnaam Combobox Keuzelijst met invoervak cbonaam, cmbnaam Listbox Keuzelijst lstnaam Checkbox Selectievakje chknaam Optionbutton Keuzerondje optnaam Commandbutton Opdrachtknop cmdnaam Form Formulier frmnaam 59

60 Overzicht Ook eigenschappen en methoden kunnen van een (vaak tweeletterige) typecodering voorzien zijn, zoals je bijvoorbeeld aan het eind van het vorige hoofdstuk kon zien aan de Styleeigenschap van de keuzelijst: fmstyledropdownlist. Een eigenschap als deze heb je niet zelf bedacht, maar als je dat wel zou doen bijvoorbeeld in eigen ontworpen klassen zou je daar ook voor kunnen kiezen. Verder zijn er programmeurs die ook al hun variabelen voorvoegsels geven van een of meer kleine letters, soms alleen maar om aan te geven dat het om een variabele gaat bijvoorbeeld varteller of vteller en in andere gevallen om het gegevenstype van de variabele herkenbaar te maken zoals in curbedrag (variabele van het type Valuta/Currency) of intteller (type Integer). In dit werkboek gebruiken wij geen aanduidingen in de namen van variabelen. Wat is er Hongaars aan die notatie? Oorspronkelijk werd het plan om objectnamen te voorzien van voorvoegsel met extra informatie bedacht door de Hongaar Charles Simonyi die in Hongarije Simonyi Károly heet. Een beetje vergelijkbaar met de omgekeerde volgorde van voor- en achternaam in het Hongaars is de naam Instellingen-formulier dan omgekeerd (en ingekort) tot frminstellingen. Men noemt het overigens ook wel de Leszynski Naamgeving Conventie (LNC). Het gebruik van notatielabeltjes is sowieso niet dwingend of verplicht, maar de extra informatie kan wel veel duidelijkheid en inzicht verschaffen. De code is dan een stuk leesbaarder en wordt bovendien ervaren als heel professioneel. Bijkomend voordeel is dat vergelijkbare objecten dezelfde voorvoegsels hebben en dus bij elkaar staan wanneer je ze opzoekt met behulp van keuzelijsten of invoegt met behulp van hinting. 7.3 VENSTER DIRECT Het verschijnsel hinting waarbij het programma alvast laat zien wat je aan objecten of mogelijkheden zou willen gebruiken, werkt in vrijwel alle vensters waar je code genereert. En er is ook een speciaal vensterpaneel waar je het kunt gebruiken zonder dat je tussen de (goedwerkende) actuele code hoeft te zitten fröbelen: het venster Direct. Open het vensterpaneel Direct (daar is een knop voor op de werkbalk Foutopsporing en ook een sneltoets: [Ctrl]+[g]). Typ er: frminstellingen. (dus met de punt erachter). Na het intypen van de punt verschijnt een lijst. 60

61 Overzicht Figuur 7.2 Hinting in vensterpaneel Direct In deze lijst staan alle objecten, eigenschappen en methodes die bij frminstellingen horen. Omdat je gebruik hebt gemaakt van de Hongaarse naamgeving staan nu alle keuzelijstjes, opdrachtknoppen, keuzerondjes, et cetera overzichtelijk bij elkaar. Zo kun je dus relatief gemakkelijk opzoeken welke objecten, opties en mogelijkheden je ter beschikking hebt. 7.4 OBJECTENOVERZICHT Een andere manier om je objecten en bijbehorende opties terug te vinden is via de objectenbrowser, oftewel het Objectenoverzicht. Dat overzicht kun je openen via menu Beeld, Objectenoverzicht, met een knop op de standaard werkbalk, of met functietoets [F2]. Leiderschapsvaardigheden Leer strategisch denken en word een betere leider Download ebooks 61

62 Overzicht In het Objectenoverzicht is alles ondergebracht in bibliotheken. Als je er linksboven een selecteert, laat Excel je zien uit welke klassen deze bibliotheek bestaat en welke leden tot deze klassen behoren. Een klasse zoals UserForm, is een algemeen object met een serie eigenschappen, zoals een titel (Caption) of een naam (Name). Als je in VBA een nieuw formulier maakt, wordt dit gebaseerd op die algemene klasse UserForm. Het eigengemaakte formulier in ons voorbeeld is lid van deze algemene klasse want het is daarop gebaseerd. Maar het onderscheidt zich van andere formulieren die ook tot deze klasse behoren, door de specifieke invulling van de eigenschappen en de toegevoegde objecten. Elk formulier dat deel uitmaakt van de algemene klasse UserForm kan zijn eigen leden hebben: dat zijn de objecten op het formulier zoals knoppen, tekst- of invoervakken. Open het Objectenoverzicht. Selecteer in het vakje linksboven (waar <Alle bibliotheken> staat) het item VBAProject en zie uit welke klassen deze bibliotheek bestaat. Klik op de klasse frminstellingen (je formulier dus). Bekijk alle leden van deze klasse en zie dat je ook je eigen elementen tegenkomt zoals de keuzelijst, de knoppen en de methoden daarbij. Figuur 7.3 Objectenoverzicht 62

63 Overzicht Typ nu cmd in het vak links van de zoekknop (die met het verrekijkertje) en klik op die knop om eronder als Zoekresultaten alle opdrachtknopobjecten te tonen. Klik op de klasse <globalen> en daarna op de klasse Module1. De subprocedure WerkWeek blijkt van beide lid te zijn (als het goed is). Dat de procedure WerkWeek lid is van de klasse <globalen> betekent dat je die sub vanaf verschillende plekken kunt aanroepen. Dubbelklik in de klasse <globalen> op het lid WerkWeek zodat je in het bijbehorende codevenster terechtkomt. Verander de subroutine nu even in een Private Sub. Zodra je het tekstinvoegpunt in een andere regel zet, zie je in het Objectenoverzicht de procedure uit de klasse <globalen> verdwijnen. Tenminste als je beide vensters in beeld hebt, anders moet je het even controleren. Maak de wijziging in de code van WerkWeek weer ongedaan (verwijder dus de toevoeging Private), en sluit de werkmap. Als je eenmaal aan het ontwerpen en programmeren slaat, maak dan goed gebruik van de hier genoemde hulpmiddelen. En eventueel ook van de door Microsoft meegeleverde helpinformatie natuurlijk. In het verdere verloop van dit werkboek zullen we het gebruik van deze middelen zo nu en dan nog aan de orde stellen. 7.5 OEFENING Omdat VBA de commando s in het Engels formuleert, wordt ook de Engelstalige terminologie van Excel gebruikt: dus Workbook (werkmap), Worksheet (werkblad), Cell (let op de spelling), Column, Chart (grafiek), Formula, et cetera. Ga in Excel naar de VBA-editor. Open het Objectenoverzicht. Zoek een aantal typsiche Excel-objecten op zoals Worksheet, Chart of Range (gebruik hiervoor het verrekijkertje) en kijk welke methoden en eigenschappen hierbij horen. Probeer zelf nog een aantal objecten te vinden, waarvan je in Excel gebruik maakt. Sluit het Objectenoverzicht. 63

64 Programmeertechnieken 8 PROGRAMMEERTECHNIEKEN 8.1 INLEIDING In dit hoofdstuk gaan we naar wat geavanceerdere technieken bij het programmeren kijken. Want er zijn nogal wat oplossingen te bedenken voor kwesties die je tijdens het programmeren in de omgang met gebruikers tegen kunt komen. Meestal zijn er meerdere mogelijkheden om iets op te lossen, en welke moet je dan kiezen? Soms is het een kwestie van afwegen van voor- en nadelen, maar in andere gevallen moet je kiezen voor een bepaalde methode om iets voor elkaar te krijgen. We bespreken in deze module het gebruik van (eigen) functies, de toepassing van beslissingstructuren en lussen, het declareren van variabelen en constanten, en het afhandelen van fouten. 8.2 FUNCTIES Er komen in programma s vrijwel altijd wel bepaalde handelingen voor die vaker uitgevoerd moeten worden. Denk aan het weergeven van een melding aan de eindgebruiker, of aan het uitvoeren van een berekening op bepaalde waarden. In het eerste geval kun je gebruikmaken van een subprocedure die vanuit verschillende plaatsen in het programma kunt aanroepen. Communicatieve vaardigheden Leer effectief communiceren Download ebooks 64

65 Programmeertechnieken Sub Melding() MsgBox "Je moet wel iets invullen..!" End Sub 'De subprocedure hierboven roep je aan met Sub Aanroep() Call Melding End Sub Voor het aanroepen van de sub mag je Call ook weg laten, maar liever niet: het maakt de code duidelijker als de instructie er volledig staat. In het geval van de berekening is een (zelfgeschreven) functie nodig die een resultaat teruggeeft aan de aanroepende procedure. Dat resultaat wordt ook wel de functiewaarde genoemd. Function Btw(Bedrag as Double) Btw = Bedrag * 0.21 End Function 'De functie hierboven roep je aan met Sub Uitrekenen() btwbedrag = Btw(txtInvoer) End Sub In dit voorbeeld wordt de functie Btw( ) aangeroepen in de subprocedure Uitrekenen(). De waarde die in het tekstvak txtinvoer staat bijvoorbeeld afkomstig uit een formulier wordt door de subprocedure doorgegeven aan de variabele Bedrag van de functie Btw. De berekening wordt uitgevoerd en het resultaat toegekend aan de variabele btw. Dat is (niet toevallig) ook de naam van de functie, en dat maakt het mogelijk dat bij terugkeer (na End Function) in de subprocedure Uitrekenen() de functiewaarde wordt overgedragen aan variabele btwbedrag. Als je in de functie niet aangeeft van welk variabeletype de functiewaarde moet zijn, wordt die automatisch Variant. Daar kan Excel prima mee rekenen. Meer over variabelen vind je verderop in dit hoofdstuk. Functies kunnen net als subprocedures Private of Public zijn. Private houdt in dat ze alleen in de huidige module toegankelijk zijn, public functions kun je ook vanuit andere modules aanroepen. Standaard zijn functies en subs in VBA public. 65

66 Programmeertechnieken Als je functies en subprocedures private maakt (dat wordt ook wel encapsulation genoemd) voorkom je dat de code verkeerd of ongewenst kan worden toegepast op eigenschappen of methoden in andere modules. Begin een nieuwe werkmap en ga naar de VBA-editor. Maak een nieuw formulier met de naam frmbtw en titel (caption) Btw uitrekenen. Plaats de volgende elementen in het formulier: een tekstvak txtinvoer om een getal te kunnen invoeren een label (bijschrift) lblinvoer links van het invoervak, met caption zoals in figuur 8.1 een label lbluitkomst om het resultaat van de berekening in te plaatsen, maak de caption ervan leeg een label lbluitvoer naast het uitkomstvak een opdrachtknop cmdbereken om de berekening uit te voeren een opdrachtknop cmdsluiten om het formulier te sluiten Time management Tips om je tijd effectiever te gebruiken! Download ebooks 66

67 Programmeertechnieken Figuur 8.1 Btw-formulier ontwerpen Voorzie de objecten van de code zoals in het onderste venster in figuur 8.1. Test het formulier. 67

68 Programmeertechnieken Als je onverhoopt ergens blijft hangen: stop het uitvoeren van de code met de knop [Beëindigen] of met het knopje Beginwaarden (het blauwe blokje) in de werkbalk Foutopsporing. Laat je (nog) niet verleiden om op de knop [Foutopsporing] te klikken. Dat komt verderop nog aan de orde. Figuur 8.2 Procedure beëindigen De code voor het formulier bestaat dus uit twee subs en één functie: de subroutines voor de opdrachtknoppen reageren op de gebeurtenis Click en voeren dan de bijbehorende code uit. Vanuit de sub cmdbereken wordt de btw-berekening gedaan met behulp van de Function btw( ). Mocht je het bedrag van de uitkomst in het formulier willen opmaken als een bedrag, dan zou je dat kunnen regelen met de volgende toevoeging van de functie Format (wat ook blijkt te werken in een label, dat eigenlijk een soort tekstveld is): lbluitkomst.caption = Format(Btwbedrag, " #0.00") 8.3 BESLISSINGSSTRUCTUREN Je kunt regelen hoe je programma in bepaalde situaties moet handelen met behulp van beslissingsstructuren in de code, zoals constructies met If-Then-Else of Select Case. Een voorbeeld: als de eindgebruiker van ons formulier klikt op de knop [Nu berekenen] zonder dat er iets is ingevuld in het invoervak, valt er ook niets te berekenen. Dat zou je kunnen melden aan de gebruiker met de code hieronder. 68

69 Programmeertechnieken If txtinvoer.text = "" Then Else 'als er niets ingetypt is MsgBox "Je moet wel iets invullen..!" 'meld je dit aan de gebruiker 'en anders voer je de volgende Dim Btwbedrag As Double 'instructies uit Btwbedrag = btw(txtinvoer) lbluitkomst.caption = Format(Btwbedrag, " #0.00") End If Pas de code aan zoals hierboven (het commentaar hoeft niet per se). Probeer uit wat er gebeurt als je op de knop [Nu berekenen] klikt zonder invoer, en daarna mét invoer. Doordat je de instructies voor de berekening en de plaatsing van de uitkomst alleen maar uitvoert als er iets is ingevuld in het tekstvak dus in het Else-deel van de constructie krijg je bij een leeg tekstveld behalve je eigen melding geen andere foutmeldingen. Het Else-deel van deze constructie is optioneel: dat betekent dat je het ook mag weglaten in bepaalde situaties, maar die moeten zich daar dan wel voor lenen. Bijvoorbeeld in de volgende code is de instructie voor een melding van wat er dan wél is ingevuld, nogal onzinnig. Leiderschapsvaardigheden Leer strategisch denken en word een betere leider Download ebooks 69

70 Programmeertechnieken If txtinvoer.text = "" Then MsgBox "Je moet wel iets invullen..!" Else MsgBox "Je invoer is " & txtinvoer End If Zo n overbodige melding moet de eindgebruiker iedere keer wegklikken, en dat resulteert dus alleen maar in een muisarm NESTING Een If-Then-Else-constructie kan ook genest zijn, dus binnen een ander If-statement worden gebruikt. Dit kan zelfs heel diep zijn, en dan geldt hetzelfde als bij haakjes in de wiskunde: de afsluiting van elke If-instructie met End If mag niet ontbreken en moet op de juiste plek gebeuren. Dat is ook de reden dat je dit soort constructies het beste tekstueel met inspringing kunt vormgeven. Bekijk de volgende code: Private Sub cmdbereken_click() If txtinvoer.text = "" Then MsgBox "Je moet wel iets invullen..!" Else If Val(txtInvoer.Text) = 0 Then MsgBox "Je invoer moet een getal zijn!" Else Dim Btwbedrag As Double Btwbedrag = btw(txtinvoer) lbluitkomst.caption = Format(Btwbedrag, " #0.00") End If End If End Sub Door de inspringing zie je welke Else en End If horen bij welke If-instructie: we hebben ze in de code hierboven even van een samenhangend kleurtje voorzien. Pas de code in je formulier aan zoals hierboven zodat je deze extra check ook doet. In de tweede If-instructie wordt gecontroleerd of de waarde (value) van de invoertekst nul is. Dat is bedoeld om ongewenste invoer van tekststrings af te vangen. Maar eigenlijk betekent het alleen dat je invoer niet met een getal begint. Verderop bespreken we een andere controle of er geen foute invoer plaatsvindt. 70

71 Programmeertechnieken SELECT CASE De constructie met Select Case is minder ingewikkeld qua structuur dan een complexe kluwen van geneste If-instructies, en daarom beter leesbaar. Maar er zijn wel minder mogelijkheden voor ingewikkelde voorwaardelijke structuren. Hieronder hebben we twee functies naast elkaar gezet die in principe hetzelfde doen: de linker gebruikt geneste Ifinstructies (strikt genomen zou het korter kunnen, omdat de derde check niet per se hoeft), in de rechter staat een constructie met Select Case als overzichtelijker alternatief. Function Vakkleur(Kleur As Integer) If Kleur = 1 Then Vakkleur = vbgreen Else If Kleur = 2 Then Vakkleur = vbyellow Else If Kleur >= 3 Then Vakkleur = vbred End If End If End If End Function Function Vakkleur(Kleur As Integer) Select Case Kleur Case 1 Vakkleur = vbgreen Case 2 Vakkleur = vbyellow Case Else Vakkleur = vbred End Select End Function Wat doen deze functies eigenlijk precies, kun je dat uit de code achterhalen? De functie van deze code is om een vakje van kleur te laten verschieten op basis van een bepaalde numerieke waarde. Bijvoorbeeld als de gebruiker in je formulier het invoervak leeg laat, kun je behalve de melding ook het vakje een kleur geven om aan te geven waar dan iets had moeten zijn ingevuld. Bij de eerste keer kleur je het vak groen, bij de volgende keer geel, en alle volgende keren rood (verderop gaan we het regelen) TELLER Om bij te houden hoe vaak de gebruiker geen of verkeerde invoer heeft geplaatst in het vak txtinvoer zoals hierboven geschetst heb je een teller nodig, oftewel een variabele die je elke keer ophoogt. We hebben het al eerder gehad over variabelen, met name de noodzaak om ze te declareren en het bereik met betrekking tot het gebruik. Want wat we hier nodig hebben is een variabele die actief en ophoogbaar blijft zolang het formulier geopend is. Daarom declareren we die variabele aan het begin van de formuliermodule. 71

72 Programmeertechnieken Maak bovenin het codevenster een nieuwe regel dus nog vóór de Private Sub cmdbereken_click(); zie in de keuzevakken dat dit de sectie (Algemeen) (Declaraties) wordt. Zet daar de instructie Option Explicit (dat vereist dat je je variabelen altijd moet declareren). Typ eronder de instructie Dim nfouten As Integer. Die blijft als het goed is boven de horizontale lijn staan in de declaratiezone (zie figuur 8.3). Bepaal in de code de plaats waar de teller moet worden opgehoogd omdat er een fout is gemaakt door de gebruiker (geen of verkeerde invoer). Bedenk het eerst zelf voordat je in het codevenster in figuur 8.3 kijkt waar de benodigde regels staan. Plaats een onderbrekingspunt op de eerste coderegel van de Sub cmdbereken. Breng (indien nodig) het venster Direct onderaan in beeld. Start de module en klik meteen op de knop [Nu berekenen] (dan is het tekstvak nog leeg). Stap door de instructies en controleer in venster Direct de waarde van de telvariabele met commando?nfouten [Enter]. Als de Sub is doorlopen, klik dan in het formulier nog eens op de berekenknop. Controleer opnieuw de waarde van nfouten. Het commando hoef je niet steeds opnieuw in te typen, keer terug naar die regel met muis of pijltjestoetsen en geef nog eens een [Enter] om het directe commando uit te voeren. Eerdere uitkomsten schuiven dan op. Communicatieve vaardigheden Leer effectief communiceren Download ebooks 72

73 Programmeertechnieken Figuur 8.3 Controle van een variabele Als het goed is loopt de waarde van de teller steeds verder op zolang het formulier actief is. Die oplopende waarde kunnen we goed gebruiken om de achtergrondkleur van het tekstvak te bepalen. Voeg onderaan in het codevenster van het formulier de functie Vakkleur toe met behulp van de code uit paragraaf Typ op de (twee) benodigde plaatsen de volgende code in om met behulp van de functie de kleur in te stellen: txtinvoer.backcolor = Vakkleur(nFouten) Zorg dat na de afhandeling van de dialoogvenstertjes de kleur van het vak weer terugverandert naar wit met de volgende code: txtinvoer.backcolor = vbwhite Test je formulier. Reken tussendoor of aan het eind eventueel ook nog een btw-bedrag uit. Kun je het allemaal nog volgen? De volledige code achter het formulier zoals die er nu moet staan, zie je in het kader op de volgende pagina. Mocht je programma niet geheel vlekkeloos verlopen, controleer dan of je een en ander hebt geregeld zoals in onze code. 73

74 Programmeertechnieken Option Explicit Dim nfouten As Integer Private Sub cmdbereken_click() If txtinvoer.text = "" Then nfouten = nfouten + 1 txtinvoer.backcolor = Vakkleur(nFouten) MsgBox "Je moet wel iets invullen..!" txtinvoer.backcolor = vbwhite Else If Val(txtInvoer.Text) = 0 Then nfouten = nfouten + 1 txtinvoer.backcolor = Vakkleur(nFouten) MsgBox "Je invoer moet een getal zijn!" txtinvoer.backcolor = vbwhite Else Dim Btwbedrag As Double Btwbedrag = btw(txtinvoer) lbluitkomst.caption = Format(Btwbedrag, " #0.00") End If End If End Sub Private Sub cmdsluiten_click() Unload Me End Sub Function btw(bedrag As Double) btw = Bedrag * 0.21 End Function Function Vakkleur(Kleur As Integer) Select Case Kleur Case 1 Vakkleur = vbgreen Case 2 Vakkleur = vbyellow Case Else Vakkleur = vbred End Select End Function 8.4 LUSSEN Zoals gezegd zul je vaak situaties tegenkomen waarin bepaalde handelingen meerdere keren moeten worden uitgevoerd. Daarvoor kun je lussen gebruiken die ervoor zorgen dat een programma een aantal opdrachten herhaaldelijk doorloopt. Hieronder vind je enkele veelgebruikte voorbeelden van lus-constructies. 74

75 Programmeertechnieken FOR-NEXT Een For-Next-constructie heeft altijd een teller nodig die wordt opgehoogd. Zo n teller kun je meestal lokaal declareren, en heel vaak wordt daar een i voor gebruikt. Dat hoeft niet, je mag zo n variabele ook varteller, intgetal of nfouten noemen, maar dat maakt de coderegels soms erg lang. In het volgende voorbeeld gebruiken we de i om 5 keer een venstertje te laten zien met de waarde die i op dat moment heeft. Elke keer dat het programma de lus doorloopt, wordt de waarde getoond en bij de instructie Next wordt de variabele i opgehoogd. Wanneer i gelijk is aan 5 is de lus beëindigd. Sub LusForNext() Dim i as Integer For i = 1 to 5 MsgBox "De waarde van de teller is " & i Next i End Sub Time management Tips om je tijd effectiever te gebruiken! Download ebooks 75

76 Programmeertechnieken Deze lus gebruik je wanneer je weet hoe vaak een bepaalde handeling moet worden herhaald. Dat aantal kan zowel een constante zijn (zoals hierboven), maar ook de uitkomst van een functie bijvoorbeeld als je de lengte van een ingevoerde tekenreeks wilt doorlopen. Dat is dan weer enigszins variabel, want je weet van tevoren niet hoe lang de tekenreeks is die de gebruiker intypt. Daarvan zie je verderop nog een voorbeeld. Het ophogen van de teller binnen de For-Next constructie hoeft niet per se in stapjes van 1 te geschieden, je mag ook een stapgrootte aangeven. De volgende opties zijn bijvoorbeeld mogelijk: For i = 10 to 100 step 10 om de serie 10, 20, 30 et cetera te doorlopen For i = 5 to 1 step -1 om van 5 terug te tellen naar 1 Je mag ook instructies ontwerpen waardoor je uit de lus kunt springen met Exit For. Het programma gaat dan verder met de instructies na Next DO-WHILE/UNTIL Een Do-While-statement werkt op een soortgelijke manier als de lus hierboven, maar er is geen teller voor nodig. Dat houdt in dat de lus wordt beëindigd als aan een bepaalde conditie is voldaan, zoals wanneer een bepaalde waarde is bereikt of als iets anders aan de hand is. In sommige gevallen is dat handiger, bijvoorbeeld als je nog niet weet hoe vaak een bepaalde uitvoering van opdrachten zal moeten plaatsvinden. Sub LusDoWhile1() Dim Getal as Integer Do While Getal < 5 Getal = Getal + 1 MsgBox Getal Loop End Sub In dit voorbeeld wordt eerst gekeken of de waarde van de variabele Getal kleiner is dan 5, en zo ja wordt de waarde opgehoogd met 1 en in een dialoogvenstertje getoond. Dit gaat door totdat de variabele gelijk is aan 5, dan wordt Getal niet meer opgehoogd en wordt de lus beëindigd. Het programma gaat dan verder met de eerstvolgende instructie na Loop (de tweede serie puntjes). Een groot verschil met de For-next lus is dat in dit geval in de instructies voorafgaand aan de Do-While lus (de eerste serie puntjes) al met de variabele Getal gerekend kan zijn, waardoor zijn waarde niet bij 0 of 1 begint, of sowieso niet meer kleiner is dan 5. Dat laatste betekent dat de hele Do-While Loop niet eens meer wordt doorlopen. 76

77 Programmeertechnieken Een variant op deze lus is de constructie zoals hieronder, waarbij de voorwaarde achteraf wordt gecontroleerd. Sub LusDoWhile2() Dim Getal as Integer Do Getal = Getal + 1 MsgBox Getal Loop While Getal < 5 End Sub Ook hier kan al in eerdere instructies een bepaalde waarde aan de variabele Getal zijn toegekend, maar de lus wordt in ieder geval één keer uitgevoerd tot aan Loop. Bij het gebruik van deze lussen kun je ook tussendoor uit de Loop springen met de instructie Exit Do. Het programma wordt dan vervolgd met de eerste instructie na de Do-constructie. In plaats van Do While mag je ook Do Until gebruiken (zowel vooraf als achteraf). Maar dat betekent meestal dat je de voorwaarde om moet keren: Do While x < 5 (voer uit zolang x kleiner is dan 5) is hetzelfde als Do Until x >= 5 (voer uit totdat x groter is dan of gelijk is aan 5) WHILE-WEND Een andere variant op de Do-While/Until-constructie is de While-Wend-lus. Deze constructie is wel enigszins verouderd, en wordt niet zoveel meer gebruikt, met name omdat je niet de mogelijkheid hebt om uit de lus te springen. Sub LusWhileWend() Dim Getal as Integer While Getal < 5 Getal = Getal + 1 MsgBox Getal Wend End Sub 77

78 Programmeertechnieken GEBRUIK VAN LUSSEN De codevoorbeelden in de vorige paragrafen kun je eventueel uitproberen in een nieuwe module van een nieuw leeg werkblad/werkmap (je moet wel de puntjes weglaten of door geldige instructies vervangen). Zeker als je ze stap voor stap doorloopt, kun je zien wat er precies gebeurt. Bij de uitvoering van zulke lussen kunnen bepaalde zaken van toepassing of juist veranderd worden, waardoor tellers of andere variabelen wel of niet worden verhoogd of veranderd, voorwaarden waar of onwaar kunnen worden, et cetera. Ook bestaat de mogelijkheid dat op basis van bepaalde berekeningen of omstandigheden de lus moet worden verlaten. Voor welke constructie je kiest, is afhankelijk van of je weet hoe vaak iets moet gebeuren, en of een bepaalde voorwaarde vóór of ná een bepaalde instructie moet worden gecheckt. Vaak is het een kwestie van uitproberen welke lus het gewenste resultaat oplevert. In het voorbeeld hieronder gaan we aan het formulier een controlefunctie toevoegen op de invoer: is de tekst die in het tekstvak terecht is gekomen wel een getal? In een lus doorlopen we de string in het tekstvak txtinvoer en zodra een teken geen cijfer of een komma is, kan worden geconcludeerd dat de string geen getal is. Leiderschapsvaardigheden Leer strategisch denken en word een betere leider Download ebooks 78

79 Programmeertechnieken Voeg onderaan in het codevenster de volgende functie toe. Function IsGetal(strInvoer As String) Dim i As Integer For i = 1 To Len(strInvoer) Select Case Mid(strInvoer, i, 1) Case ",", "1", "2", "3", "4", "5", "6", "7", "8", "9", "0" IsGetal = True Case Else IsGetal = False Exit For End Select Next i End Function Deze functie doorloopt teken voor teken de hele lengte van de tekenreeks die de gebruiker heeft ingevuld in het vak txtinvoer, en kijkt of elk teken behoort tot de verzameling achter het eerste Case-statement. Als dat niet het geval is, wordt de functiewaarde Onwaar en wordt de lus beëindigd. Bij terugkeer in de aanroepende subroutine betekent dat dat het aantal fouten moet worden verhoogd. Vervang in de Sub cmdbereken de regel If Val(txtInvoer.Text) = 0 Then door If Not IsGetal(txtInvoer) Then. Dit roept de controlefunctie aan en geeft terug dat de invoer wel of niet een getal is. Test het formulier. 8.5 TOETSEN AFVANGEN Een andere manier om te controleren of wat in het tekstveld wordt getypt wel een getal is, maakt gebruik van een subprocedure die al tijdens het invullen van het vak meeloopt. Iedere keer als een toets wordt ingedrukt, kijkt het programma of dat wel een toegestaan teken is: een cijfer of een komma. Bij alle andere toetsen wordt het teken niet aan de invoerreeks toegevoegd. Dan ontstaat vanzelf invoer die altijd een getal is. Voeg een Private sub toe voor txtinvoer met als gebeurtenis (rechter keuzevak) KeyPress (haal eventueel de onnodige sub voor het Change-event weg). Excel plaatst nu enkele benodigde ingebouwde code-items om de toetsaanslagen op te halen. 79

80 Programmeertechnieken Figuur 8.4 Sub voor toetscontrole Plaats in de subroutine de onderstaande code. Hiermee wordt bekeken welke tekens toegestaan zijn: als het cijfers zijn of een komma (mag maar één keer voorkomen in de tekenreeks en niet op de eerste positie staan) hoeft er niets te gebeuren, zodat de toets aan de invoerreeks wordt toegevoegd. In alle andere gevallen wordt de toets niet toegevoegd (KeyAscii = 0). Private Sub txtinvoer_keypress(byval KeyAscii As MSForms.ReturnInteger) Select Case KeyAscii Case Asc("0") To Asc("9") Case Asc(",") If InStr(1, txtinvoer.text, ",") > 0 Or txtinvoer.selstart = 0 Then KeyAscii = 0 End If Case Else KeyAscii = 0 End Select End Sub Deze slimme en handige procedure kwamen we tegen op internet, in een forum voor VBAprogrammeurs. Veel wielen zijn al uitgevonden, dus als je eens tegen een probleempje in je programma aanloopt, is de kans groot dat iemand er al een oplossing voor heeft bedacht. En ook met bepaalde code die je misschien zelf (nog) niet kende of had kunnen bedenken. Bewaar en sluit je werkmap. In het volgende hoofdstuk heb je dit bestand weer nodig! 8.6 VARIABELEN EN CONSTANTEN Je bent ze nu al regelmatig tegengekomen: allerlei variabelen die je nodig hebt in je programma bijvoorbeeld om berekeningen uit te voeren, lussen af te werken of instellingen te realiseren. Laten we nog even de belangrijkste aspecten hiervan bekijken. 80

81 Programmeertechnieken Of je je variabelen altijd moet declareren is zoals al eerder vermeld afhankelijk van de instructie Option Explicit die al dan niet in de sectie (Algemeen) van een module staat. Als dat zo is, dan móéten alle variabelen die je gebruikt worden gedeclareerd, anders hoeft dat niet. Maar als je het niet doet, wordt je programmacode vooral voor een buitenstaander meestal nogal verwarrend. En als je per ongeluk in een andere module, sub of functie dezelfde variabele(naam) nog eens gebruikt, welke waarde heeft de variabele daar dan? LOKAAL OF GLOBAAL Variabelen kunnen lokaal of globaal zijn, en dat beïnvloedt binnen welk bereik de variabelen bereikbaar zijn voor andere modules. Lokale variabelen zijn alleen toegankelijk binnen de subprocedure als je ze binnen de sub declareert. Dat kun je doen bovenin de module in de sectie (Algemeen) nog voor de subprocedures, na het eventuele statement Option Explicit (zie boven), of vlak onder de eerste regel van een sub of functie, met de instructie Dim en vervolgens de naam en het type van de variabele. Globale variabelen declareer je bovenin een algemene module (dus niet in een formulier), eventueel na Option Explicit, met het statement Public Dim. Deze variabelen zijn in alle modules en procedures toegankelijk. Communicatieve vaardigheden Leer effectief communiceren Download ebooks 81

82 Programmeertechnieken Gebruik bij voorkeur lokale variabelen omdat ze de eigenschappen of methoden in andere dan hun eigen omgeving niet kunnen beïnvloeden VARIABELETYPEN Er zijn vele typen variabelen, kijk maar eens in Help of op internet. Hieronder bespreken we de meest gebruikte typen, te weten: Boolean, Integer, Long, Double, String en Variant. Als je andere typen tegenkomt, zoek dan vooral op wat de (on)mogelijkheden van zo n type zijn. Boolean Dit is een variabeletype met twee mogelijkheden: True (Waar) en False (Onwaar). Vergelijk het maar met een schakelaar of een vinkje. Boolean-variabelen kun je bijvoorbeeld gebruiken om bij te houden of een bepaalde handeling heeft plaatsgevonden of niet. Als je wilt dat een melding eenmalig in beeld verschijnt, namelijk alleen de eerste keer dat iets gebeurt, kun je dit bijhouden in een variabele van het type Boolean. Nadat het bericht is getoond, wordt de waarde van de variabele in de programmacode gewijzigd. Via een beslissingsstructuur kun je controleren of het venster is getoond (waarde True) of niet (waarde False), en op basis van de uitkomst wordt het al of niet alsnog getoond. Dim Getoond as Boolean If Not Getoond then MsgBox "Hello" Getoond = True End If Bij declaratie is de Boolean-variabele ingesteld op False. De controle in het voorbeeld hierboven had ook kunnen luiden: If Getoond = False Then of If Not Getoond = True Then. Dat laatste mag je ook zonder = True gebruiken. Integer en Long Integer is een variabeletype waarin hele getallen tussen het bereik van en kunnen worden opgeslagen. Om grotere getallen op te slaan moet je Long integer gebruiken. Dat type wordt ook wel kortweg Long genoemd, en heeft een bereik van tot en met Integer-variabelen worden opgeslagen als hele getallen in 2 bytes, Long-variabelen als hele getallen in 4 bytes. Integer-variabelen gaan dus zuiniger met het geheugen om. 82

83 Programmeertechnieken Double (Dubbele Precisie) Dit type variabele is voor getallen met decimalen in het bereik van -1, e308 tot -4, e-324 voor negatieve waarden, en van 4, e-324 tot 1, e308 voor positieve waarden. Ze worden opgeslagen in 8 bytes. String Een String-variabele kan bestaan uit een reeks van opeenvolgende tekens, waarvan de tekens in principe moeten worden geïnterpreteerd als de letterlijke tekens (en dus niet als de numerieke waarde ervan). Je kunt met getallen die in een String-variabele zijn geplaatst, niet rekenen. Een variabele van het String-type kan maximaal circa 2 miljard tekens bevatten. Variant Een universeel, maar nogal vaag variabeletype is Variant. Als je een variabele declareert en niet opgeeft van welk type deze is, wordt hij automatisch Variant. Variant-variabelen kunnen numerieke waarden, datums of tekenreeksen bevatten. Probeer variabelen van dit type te vermijden, want het is lang niet altijd duidelijk wat ze doen, inhouden of veroorzaken in het programma. Je moet er rekening mee houden dat bepaalde bewerkingen tussen variabelen van verschillende typen niet mogelijk zijn. Zo kun je variabelen van het type Long niet zomaar met Integerof String-variabelen combineren in een bewerking. Dan kan er namelijk een data type mismatch ontstaan. Dat kun je voorkomen door beide variabelen te declareren met hetzelfde datatype, of door de variabelen met behulp van (geavanceerde) hulpfuncties te converteren naar een gelijk type CONSTANTEN Constanten zijn in tegenstelling tot variabelen niet variabel in waarde, maar constant. Ze worden in de regel gedeclareerd in de sectie (Algemeen), hoewel je dit ook best in een sub zou mogen doen (dan is die ook alleen daar geldig). Als je een constante na de Option Explicit in een algemene module hebt gedeclareerd, kan de waarde in de programmacode niet meer worden gewijzigd. Constanten zijn handig als je bijvoorbeeld op verschillende plekken in je code een padverwijzing gebruikt of een bepaalde vaste waarde wilt gebruiken zoals een btw-percentage. Als de padverwijzing of het btw-percentage moet worden aangepast, hoef je de waarde van de constante slechts in de algemene sectie te wijzigen, en niet op alle verschillende plaatsen in de code. 83

84 Programmeertechnieken Option Explicit Public Const conpad = "C:\test" Sub constant() 'Open de werkmap test.xlsx die in de map C:\test staat Workbooks.Open (conpad & "\test.xlsx") End Sub 8.7 FOUTAFHANDELING Als er in de uitvoering van je programma een fout optreedt, schakelt VBA over naar de Onderbrekingsmodus en geeft een foutmelding. Voor de programmeur erg handig, maar ook de eindgebruiker krijgt in zo n geval de programmeercode te zien. Het is beter code of procedures in het programma op te nemen die voorkomen dat het programma vastloopt. We noemen dat foutafhandeling (error trapping). Twee voorbeelden van hoe je dit zou kunnen doen. Time management Tips om je tijd effectiever te gebruiken! Download ebooks 84

85 Programmeertechnieken Sub Procedurenaam() On Error Resume Next code in de sub End Sub De regel On Error Resume Next aan het begin van een subroutine zorgt ervoor dat als een fout optreedt, de uitvoering van het programma verdergaat met de volgende coderegel. Dan wordt dus niet op de fout gereageerd. Deze code zorgt er alleen maar voor dat het programma niet vastloopt en in onderbrekingsmodus komt! Sub fout() On Error Goto fout code in de sub Exit Sub fout: MsgBox Err.description Exit Sub End Sub In het tweede voorbeeld wordt als een fout optreedt, naar het label fout: gesprongen dat verderop in de programmacode staat. De procedure wordt beëindigd en een bericht met de foutmelding getoond. MsgBox Err.description zorgt ervoor dat de standaard VBA-foutmelding wordt getoond. Je kunt in plaats daarvan ook een eigen foutmelding laten verschijnen. Als je niet zeker weet wat er in de volgende coderegels gaat gebeuren na het optreden van een fout, kun je beter voor een foutafhandeling zoals in het tweede voorbeeld kiezen. 85

86 Programmeertechnieken 8.8 OEFENING We maken in de volgende opdrachten een formulier dat je kunt gebruiken om verschillen tussen de hiervoor genoemde gegevenstypen duidelijk te maken. In de subprocedure die achter het formulier hangt, gebruiken we ook een foutafhandeling. Maak in een nieuwe werkmap een nieuw formulier met de naam frmvariabelen en zorg dat het eruitziet zoals in de figuur hieronder. Leiderschapsvaardigheden Leer strategisch denken en word een betere leider Download ebooks 86

87 Programmeertechnieken Figuur 8.5 Formulier voor variabelentypen De eerste regel bevat een bijschrift lblboolean, een tekstvak txtboolean en een label lblbooleanwaarde. Doe hetzelfde (met vergelijkbare namen) voor de andere variabelentypen. Noem de knop cmdok. Regel ook de captions van alle elementen. Via de handvatten (de blokjes) maak je het formulier groter. Kijk tijdens het maken van het formulier ook eens naar de mogelijkheden die je vindt in menu Opmaak om de labels en tekstvakken uit te lijnen. Gebruik eventueel de opties Kopiëren en Plakken. Als je dat doet, zal de grootte van deze kopieën gelijk zijn aan die van het origineel. Dit werkt sneller dan wanneer je de grootte van ieder object afzonderlijk moet instellen. Plaats in de subroutine voor de [OK]-knop de onderstaande programmacode. Merk op dat er ook een variabelentype Object is dat je hier handig kunt gebruiken. 87

88 Programmeertechnieken Private Sub cmdok_click() 'Declareren van de verschillende variabelentypen Dim varboolean As Boolean Dim varinteger As Integer Dim varlong As Long Dim varstring As String Dim varvariant As Variant 'Het object onthouden in deze variabele voor de foutmelding Dim varobject As Object 'Wanneer er een fout optreedt, ga dan naar het label fout: On Error GoTo fout Set varobject = Me.txtBoolean Me.txtBoolean.ForeColor = vbblack varboolean = Me.txtBoolean Me.lblBooleanWaarde.Caption = varboolean Set varobject = Me.txtInteger Me.txtInteger.ForeColor = vbblack varinteger = Me.txtInteger Me.lblIntegerWaarde.Caption = varinteger Set varobject = Me.txtLong Me.txtLong.ForeColor = vbblack varlong = Me.txtLong Me.lblLongWaarde.Caption = varlong Set varobject = Me.txtString Me.txtString.ForeColor = vbblack varstring = Me.txtString Me.lblStringWaarde.Caption = varstring Set varobject = Me.txtVariant Me.txtVariant.ForeColor = vbblack varvariant = Me.txtVariant Me.lblVariantWaarde.Caption = varvariant Exit Sub fout: 'De variabele kan niet worden gelijkgesteld aan de door de 'gebruiker ingevoerde waarde, en die wordt dan in rood weergegeven varobject.forecolor = vbred 'De overblijvende programmacode wordt uitgevoerd Resume Next End Sub 88

89 Programmeertechnieken Experimenteer met het formulier. Dat doe je door in de vijf tekstvakken iets in te vullen (zoals in het voorbeeld in onderstaande figuur) en dan op [OK] te klikken. Figuur 8.6 Ingevuld formulier Het is mogelijk om met de [Tab]-toets van tekstvak naar tekstvak te springen (of [Shift]+[Tab] in omgekeerde richting). Wanneer de volgorde niet goed is ingesteld, pas dan de tabvolgorde aan. Dit doe je door van ieder object de TabStop op True of False te zetten en door de nummervolgorde in de eigenschap TabIndex aan te passen. Bekijk nog even de volgende kwesties: Waarom is de waarde in tekstvak txtinteger in figuur 8.6 rood? Wanneer bevat de variabele varboolean de waarde waar en wanneer onwaar? Kun je tekst typen in de Integer-tekstbox? Typ tekst en getallen in het Variant-vak. Probeer ook negatieve getallen in te typen! 89

90 Code integreren 9 CODE INTEGREREN 9.1 INLEIDING In dit hoofdstuk nemen we met je door hoe je in werkbladen om kunt gaan met je eigen programmamaaksels. Zo bespreken we hoe je een formulier opent of een macro uitvoert vanuit een werkblad. Maar ook hoe je een eigen programma als interne functie kunt installeren. 9.2 STARTEN Wanneer je een formulier, sub of macro hebt geprogrammeerd, wil je deze vanuit Excel kunnen aanroepen. Omdat het programma subroutines in algemene modules als macro s beschouwt, vind je die terug in het macrovenster. Open de werkmap Btwberekening. Ga naar de VBA-editor, en maak daar een nieuwe module met de code zoals hieronder. Communicatieve vaardigheden Leer effectief communiceren Download ebooks 90

91 Code integreren Public Sub ToonFormulier() frmbtw.show End Sub Schakel over naar het werkblad in Excel. Ga naar het macrobeheervenster (tab Ontwikkelaars, Programmacode, Macro s). Figuur 9.1 Macro starten vanuit beheer Je vindt hier de zojuist gemaakte Sub terug als macro, en die kun je dus starten met de knop [Uitvoeren]. Doe maar. In het beheervenster hierboven (figuur 9.1) kun je via de knop [Opties ] ook nog (achteraf) een sneltoets toekennen aan deze macro. Doordat Excel de sub als macro ziet, kun je ook heel eenvoudig een knop in de werkbalk Snelle toegang plaatsen die de macrocode uitvoert. Klik op het knopje Aanpassen aan de rechterkant van de werkbalk Snelle toegang en kies de optie Meer opdrachten. Selecteer in het venster (Opties voor Excel, De werkbalk Snelle toegang aanpassen) in de linker opdrachtenkeuzelijst de Macro s. Voeg de macro ToonFormulier toe de werkbalk. 91

92 Code integreren Figuur 9.2 Macroknop toevoegen aan werkbalk Snelle toegang Kies eventueel een ander pictogrammetje voor de knop (zodat niet al je eigen programma s en macro s hetzelfde icoontje krijgen). Als je de tekst achter Weergavenaam aanpast, wordt die nieuwe naam getoond als uitlegkadertje bij het aanwijzen van de knop. Roep het formulier op met de knop en maak een berekening. Sluit het formulier, en sluit ook de werkmap. De code voor het formulier heb je meebewaard in de werkmap Btwberekening. Maar misschien wil je dit rekenhulpje ook gebruiken in andere werkmappen. Begin een nieuwe werkmap. Merk op dat in de werkbalk Snelle toegang de macro-knop nog aanwezig is. Klik er op en zie het venstertje voor de btw-berekening verschijnt. Dat lijkt allemaal dus heel handig, maar er zitten toch nog wel wat haken en ogen aan. Deze manier van werken is alleen te gebruiken als de werkmap waar de code in zit het bestand Btwberekening dus op je computer aanwezig is, en op dezelfde plek staat als waar het altijd stond. Want mocht je het bestand verplaatsen of hernoemen, dan werkt het niet meer en krijg je een foutmelding. Probeer het eventueel maar eens uit. 92

93 Code integreren Er zijn programmeurs en eindgebruikers die een speciaal bestand hebben met allerlei programmaatjes, formuliertjes, macro s en hulpjes die ze vanuit elke andere werkmap in Excel kunnen bereiken met macro-knoppen. Dat werkt uiteraard als iemand een vaste werkplek heeft. In plaats van een knop plaatsen op de werkbalk Snelle toegang, kun je natuurlijk ook het lint voorzien van een startknop voor het formulier. En daarvoor geldt precies hetzelfde als voor de knop op de werkbalk: als je het oorspronkelijke bestand met de code verplaatst of hernoemt, gaat het fout. Ga naar de Opties voor Excel, en kies nu rubriek Lint aanpassen. Voeg aan het hoofdtabblad Beeld een nieuwe groep toe met de naam Formulieren. Verplaats nu de macro ToonFormulier uit de linker lijst naar de nieuwe groep, kies er een fraai pictogram voor, en stel als naam Btw berekenen in. Time management Tips om je tijd effectiever te gebruiken! Download ebooks 93

94 Code integreren Figuur 9.3 Macroknop toevoegen aan het lint Dat ziet er uiteindelijk in het lint als volgt uit: Figuur 9.4 Macroknop in het lint Open het formulier via het lint AUTO_OPEN Een speciaal verschijnsel is dat bij het openen van een werkmap direct een macro gestart kan worden. Die macro moet dan als naam Auto_open() dragen. Nu zou je natuurlijk de macro die het formulier opent, die naam kunnen geven. Maar dan is het wel onhandig om het formulier via andere methoden te openen. Beter en gemakkelijker is het om een speciale Auto_open-sub te maken die de ToonFormulier-sub aanroept. 94

95 Code integreren Ga in de VBA-editor naar het codevenster Module1 en voeg er de volgende sub aan toe. Figuur 9.5 Automatisch starten van een macro Sluit de werkmap, wel bewaren natuurlijk! Open het model Btwberekening opnieuw, en zie dat direct het formulier Btw uitrekenen verschijnt. Sluit het formulier, en open het opnieuw via het lint of de werkbalk Snelle toegang KNOPPEN OP HET WERKBLAD Ook kun je een knop in het werkblad plaatsen die het formulier opent. Op tab Ontwikkelaars vind je een groep Besturingselementen met objecten die je op een willekeurige plaats neer kunt zetten. Figuur 9.6 Besturingselementen in het werkblad plaatsen Voeg een knop in op het werkblad en wijs er macro ToonFormulier aan toe. Verander ook de caption (op de knop zelf). Figuur 9.7 Een knop op het werkblad 95

96 Code integreren Activeer een willekeurige cel op het werkblad, en wijs vervolgens de knop aan. De muiswijzer verandert dan in een handje en zo kun je het formulier openen met de knop. Mocht je nog iets aan de lay-out of werking van de knop willen wijzigen, selecteer de knop dan eerst als object door er met de [Ctrl]-toets ingedrukt op te klikken. Je mag ook direct het contextmenu van de knop activeren om wijzigingen aan te brengen. Behalve formulierbesturingselementen zou je ook ActiveX-besturingselementen kunnen gebruiken (zie figuur 9.6). Wees wel voorzichtig met deze elementen, ze kunnen nog wel eens lekkage vertonen en ze worden door beveiligingsprocedures argwanend bekeken. Kies liever de formulierelementen. 9.3 INVOEGTOEPASSING Er is nog een bijzondere mogelijkheid om VBA-code te integreren in je Excel-omgeving, namelijk als invoegtoepassing. Zo kun je eigen functies toevoegen aan de ingebouwde functies van Excel, zodat ze op dezelfde manier te gebruiken zijn als bijvoorbeeld =Som( ), =Aantal( ), =Max( ), en dergelijke. Mocht je dat een interessante mogelijkheid vinden, voer dan de opdrachten hieronder nauwkeurig uit en ontdek hoe het werkt. Leiderschapsvaardigheden Leer strategisch denken en word een betere leider Download ebooks 96

97 Code integreren Maak in een nieuwe werkmap in de VBA-editor een nieuwe module met de onderstaande code voor de functie Staffelprijs. Function Staffelprijs(Aantal, Prijs) Select Case Aantal Case Is >= 150 Staffelprijs = Prijs * 0.85 Case Is >= 100 Staffelprijs = Prijs * 0.9 Case Is >= 50 Staffelprijs = Prijs * 0.95 Case Else Staffelprijs = Prijs End Select End Function Deze code kan berekenen wat de prijs van een product wordt naarmate je er meer van afneemt: elke 50 exemplaren meer levert 5% meer korting op. Even kijken of de functie naar behoren werkt. Maak het modelletje zoals in de figuur hieronder. Figuur 9.8 Controle van de nieuwe functie 97

98 Code integreren Voeg de functie in zoals je dat normaal zou doen, bijvoorbeeld via de knop Functie invoegen van de formulebalk. Als het goed is, bestaat er nu een categorie Door gebruiker gedefinieerd waarin je gecodeerde functie staat. Kies de functie en vul vervolgens de verwijzingen in als de Functieargumenten. Figuur 9.9 Functieargumenten voor je eigen functie Communicatieve vaardigheden Leer effectief communiceren Download ebooks 98

99 Code integreren Probeer andere aantallen uit en zie dat de staffelprijs wordt aangepast waar nodig. Als het allemaal naar behoren werkt, kun je deze functie aan Excel toevoegen als invoegtoepassing zodat die voortaan altijd beschikbaar is. Bewaar overigens eerst even de werkmap met de code, want mocht je er iets aan willen wijzigen, dan kan dat alleen maar daar. Maak het werkblad weer leeg en bewaar het document als Excel-werkmap met macro s met de naam Staffelprijs. Kies nu (nogmaals) Opslaan als om de werkmap te bewaren als invoegtoepassing. Daarvoor stel je onderin het venster Opslaan als eerst het bestandstype in als Excel-invoegtoepassing zodat het programma de locatie opent waar je het.xlam-bestand moet bewaren. Figuur 9.10 Bewaren als een invoegtoepassing Bovenin het venster zie je in welke map de invoegtoepassingen terechtkomen, en eventueel kun je ze daar ook weer uit verwijderen. Die locatie (pad en map) laat Windows zien als je eenmaal in het adresvak klikt. Als de bestandsnaam en het bestandstype zijn ingevuld, laat je het bestand [Opslaan]. Klik op tab Ontwikkelaars op de knop Invoegtoepassingen. 99

100 Code integreren Figuur 9.11 Je invoegtoepassing activeren Activeer er de invoegtoepassing (aanvinken en [OK]). Er is overigens ook een langere weg via de Opties voor Excel, bekijk die eventueel ook even. Sluit alle werkmappen, en begin met een nieuwe. Kijk of je hier je nieuwe functie ook kunt activeren. Zal toch wel..? 100

101 Praktijkcase: een factuurmodel 10 PRAKTIJKCASE: EEN FACTUURMODEL 10.1 INLEIDING In dit hoofdstuk gaan we nader kijken naar de mogelijkheden in de praktijk met specifieke Excel-objecten zoals werkbladen, cellen en formules, en de combinatie met VBA-bouwsels. Hoe haal je bijvoorbeeld bepaalde waarden op of schrijf je resultaten weg in cellen. We bespreken in de opdrachten nu niet meer elke stap, want ondertussen ben je natuurlijk een ervaren Excel-gebruiker die wel weet hoe je een en ander aanpakt DE WERKMAP FACTUUR In het voorbeeld in dit hoofdstuk gaan we een werkmap maken waarmee we facturen gaan opstellen voor een unieke fruithandel: gespecialiseerd in het maken van fruitcadeaus waarbij afrekenen per vrucht mogelijk is in plaats van per kilo. Het eerste werkblad van de werkmap bevat de factuur, het model waarin de factuurregels moeten komen. Daarnaast bevindt zich in het bestand een prijslijst waarin de verschillende producten met hun prijzen staan. Time management Tips om je tijd effectiever te gebruiken! Download ebooks 101

102 Praktijkcase: een factuurmodel Maak een nieuwe werkmap en sla die meteen op met de naam Factuur (als Excelwerkmap met macro s). Zorg ervoor dat er in deze werkmap twee werkbladen staan: één met de (tab)naam Factuur en één met de naam Prijslijst. Plaats labels in rij 1 zoals in de onderstaande figuur (let op de kolombreedten). Figuur 10.1 Rekenmodel tabblad Factuur Geef cel A4 de naam Factuurregel (op tab Formules). Die naam verschijnt ook in het naamvak linksboven. Geef de kolommen waar straks bedragen in komen (D:G) de opmaak Financieel. Het werkblad Prijslijst moet er uitzien als in figuur Figuur 10.2 Werkblad Prijslijst 102

103 Praktijkcase: een factuurmodel Zorg ervoor dat de cellenreeks A1:A11 op tabblad Prijslijst waarin de producten staan de naam Product krijgt, de reeks met prijzen moet Prijs heten, en het bereik waarin het btw-percentage staat krijgt de naam btw. Deze namen zijn nodig omdat we er straks in moeten gaan opzoeken HET FACTURERINGSFORMULIER We maken nu een formulier met de mogelijkheid om de producten te kiezen die op het tabblad Prijslijst staan. En als er een product is gekozen, moeten ook de bijbehorende prijs en het btw-percentage worden opgehaald. Maak in de VBA-editor een formulier dat er uitziet als in de figuur hieronder. Daarbij gebruiken we enkele nieuwe besturingselementen zoals een tabbesturingselement, een kringveld (spin button), en dergelijke, zodat je ook daarmee kennis kunt maken. Kijk trouwens eerst even naar de tabel op de volgende pagina waar je kunt vinden hoe al die elementen moeten heten. Figuur 10.3 Formulier Facturatie Het tabblad Factuurregels laten we nu nog even voor wat het is. Houd je aan de naamgeving in onderstaande lijst, dit voorkomt straks problemen! 103

104 Praktijkcase: een factuurmodel Object: Naam: Caption: formulier frmfactuur Facturatie tabbesturingselement tabfactuur tabblad Nieuwe regel toevoegen pagregel Nieuwe regel toevoegen tabblad Factuurregels pagfactuur Factuurregels spinbutton (kringveld) spnaantal label Aantal lblaantal Aantal: label Product lblproduct Product: label Prijs lblprijs Prijs: label BTW lblbtw BTW%: combobox Prijs (keuzelijst met invoervak) combobox BTW tekstvak Aantal combobox Product cboprijs cbobtw txtaantal cboproduct 2e label Prijs lblprijs2 Prijs 2e label BTW lblbtw2 BTW% knop Factuurregel toevoegen (opdrachtknop) cmdtoevoegen Factuurregel toevoegen Bekijk het formulier en test het (zonder code erachter dus). Bewaar de werkmap DE CODE Je zult merken dat er in feite nog niets gebeurt als je de keuzeknopjes, de opdrachtknop of bijvoorbeeld de spinbutton gebruikt. We gaan daarom code hangen aan de diverse elementen. Sluit het formulier en keer terug naar het ontwerpvenster in de VBA-editor. Selecteer het kringveld spnaantal, en stel in de Eigenschappen de waarde van Min in op 1 en Max op 10. Voor grotere aantallen is het handiger om die in te typen. Regel met een subprocedure dat het tekstvak txtaantal wordt opgehoogd of verlaagd als je op de spinbutton klikt (probeer het eerst zelf te bedenken, de oplossing staat hieronder). Test dit in het formulier. 104

105 Praktijkcase: een factuurmodel Private Sub spnaantal_change() Me.txtAantal = spnaantal.value End Sub Volgende stap is om ervoor te zorgen dat bij het openen van het formulier de comboboxen met de gegevens uit het werkblad Prijslijst zijn gevuld. Hierbij maken we gebruik van de Excel-objecten Cell en ActiveCell. Typ onderstaande code in het codevenster van het formulier. Leiderschapsvaardigheden Leer strategisch denken en word een betere leider Download ebooks 105

106 Praktijkcase: een factuurmodel Private Sub UserForm_Initialize() ActiveWorkbook.Worksheets("Prijslijst").Activate ActiveWorkbook.Worksheets("Prijslijst").Range("product").Select 'Ga naar de tweede cel van de kolom, de eerste is alleen 'een kolomkop ActiveCell.Offset(1, 0).Activate 'De combobox Product vullen met gegevens Do While ActiveCell.Text <> "" Me.cboProduct.AddItem ActiveCell.Value ActiveCell.Offset(1, 0).Activate Loop 'De combobox Prijs vullen met gegevens ActiveWorkbook.Worksheets("Prijslijst").Range("prijs").Select ActiveCell.Offset(1, 0).Activate Do While ActiveCell.Text <> "" Me.cboPrijs.AddItem ActiveCell.Value ActiveCell.Offset(1, 0).Activate Loop 'De combobox BTW vullen met gegevens ActiveWorkbook.Worksheets("Prijslijst").Range("btw").Select ActiveCell.Offset(1, 0).Activate Do While ActiveCell.Text <> "" Me.cboBtw.AddItem ActiveCell.Value ActiveCell.Offset(1, 0).Activate Loop Me.txtAantal = me.spnaantal.value End Sub Mocht een en ander niet meteen goed gaan, gebruik dan Foutopsporing om stap voor stap de procedure te doorlopen en zo eventuele onvolkomenheden te vinden. Nu moeten we nog de combobox cboproduct zodanig aanpassen dat je bij het kiezen van een product in die keuzelijst meteen de bijbehorende prijs en het btw-percentage te zien krijgt in het formulier. Dat kan bijvoorbeeld met de volgende subprocedure. 106

107 Praktijkcase: een factuurmodel Private Sub cboproduct_change() Me.cboPrijs.ListIndex = Me.cboProduct.ListIndex Me.cboBTW.ListIndex = Me.cboProduct.ListIndex Me.lblPrijs2 = Format(Me.cboPrijs, " #,##0.00") Me.lblBTW2 = Format(Me.cboBTW, "0%") End Sub Je kunt in de code ondertussen wel ontdekken waar je die instructies moet plaatsen, dus pas de codelisting aan op de benodigde plaats. Bestudeer de code om te zien wat er precies gebeurt. Test het formulier, vooral natuurlijk wat er gebeurt als je er een ander product in de keuzelijst kiest. De comboboxen cboprijs en cbobtw waar de werkelijke waarden staan die bij de producten horen, heeft de gebruiker verder niet nodig. Ze moeten er wel zijn, anders hadden we een zelf gedefinieerde array moeten inzetten (dat komt verderop nog aan bod), maar in dit geval werken combo s gemakkelijker. Communicatieve vaardigheden Leer effectief communiceren Download ebooks 107

108 Praktijkcase: een factuurmodel Zorg ervoor dat de genoemde combo s uit het zicht van de gebruiker verdwijnen (via de eigenschap Visible) LIJST MET FACTUURREGELS Nu moeten het gekozen product, het aantal en de prijs worden onthouden, om ze in de factuur te kunnen zetten. We gaan eerst het tabblad Factuurregels aanpassen en hierop een listbox (keuzelijst) en een opdrachtknop plaatsen. Een listbox heeft diverse eigenschappen voor het instellen van de kolommen in de lijst, zoals de eigenschap ColumnCount die het aantal kolommen in de listbox bepaalt. Het maakt niet zoveel uit hoeveel rijen er zijn. Je stelt de hoogte van de listbox gewoon in zoals je hem wilt hebben. Als niet alle regels erin passen, wordt er automatisch een schuifbalk gegenereerd zodat je door de gegevens heen kunt scrollen. De eigenschap ColumnHeads wordt gebruikt om aan te geven of de namen van de kolommen zichtbaar moeten zijn of niet. ColumnWidths spreekt voor zich: hiermee kun je de breedtes van de kolommen bepalen. Zorg er bij voorkeur voor dat alle gegevens in de kolommen geheel zichtbaar zijn. Pas het tabblad pagfactuur aan als in de figuur hieronder. Noem de listbox lstfactuur en de opdrachtknop cmdok. Figuur 10.4 Tabblad Factuurregels Stel het aantal kolommen (ColumnCount) en de kolombreedten (ColumnWidths) van de keuzelijst in zoals in figuur 10.5 (ze zullen na invoer om onbekende redenen enigszins worden aangepast door Excel). 108

109 Praktijkcase: een factuurmodel Figuur 10.5 Kolombreedten van de lijst Een listbox kun je met gegevens vullen met behulp van een array, ofwel een variabele in de vorm van een matrix. Deze kan één-, twee- of driedimensionaal zijn. Eerst moet je de array met gegevens vullen en vervolgens koppel je de array aan de listbox. Let op: de eerste regel en de eerste kolom van een matrix worden in VBA als de nulde regel en de nulde kolom gezien! Dit maken we in de volgende paragraaf duidelijk. Time management Tips om je tijd effectiever te gebruiken! Download ebooks 109

110 Praktijkcase: een factuurmodel FACTUURREGELS MAKEN Om de lijst met producten voor de factuur te maken, gaan we op de eerste pagina (tabblad) van het formulier code toevoegen aan de knop cmdtoevoegen die ervoor zorgt dat het zojuist gekozen product, het aantal, de prijs en de btw terechtkomen in de listbox op de tweede pagina. En als er nogmaals op de knop [Factuurregel toevoegen] wordt geklikt, moet er natuurlijk wederom een regel aan de listbox worden toegevoegd. Maak de onderstaande subprocedure aan op de juiste plek (lees ook het ingevoegde commentaar goed door om te zien wat de code doet). Private Sub cmdtoevoegen_click() Dim nregels As Integer Dim x As Integer 'Bepaal hoeveel regels er momenteel in de listbox staan nregels = Me.lstFactuur.ListCount 'Hieronder wordt de (tweedimensionale) array gedefinieerd. 'We moeten van ReDim gebruik maken i.p.v. Dim, omdat de grootte 'van de array afhankelijk is van de variabele nregels 'De 3 betekent dat er vier kolommen zijn, de 0e, 1e, 2e en 3e. ReDim regel(nregels, 3) 'Stel de laatste regel van de array gelijk aan de inhoud van de 'elementen op het ingevulde tabblad regel(nregels, 0) = Me.txtAantal regel(nregels, 1) = Me.cboProduct regel(nregels, 2) = Me.cboPrijs regel(nregels, 3) = Me.cboBtw 'De bestaande inhoud van de listbox moet ook weer in 'de array geplaatst worden! For x = 0 To nregels - 1 regel(x, 0) = Me.lstFactuur.Column(0, x) regel(x, 1) = Me.lstFactuur.Column(1, x) regel(x, 2) = Me.lstFactuur.Column(2, x) regel(x, 3) = Me.lstFactuur.Column(3, x) Next x 'De inhoud van de array wordt met een commando aan de listbox gekoppeld Me.lstFactuur.List = regel End Sub 110

111 Praktijkcase: een factuurmodel Test de knop en bekijk het resultaat steeds op het tabblad Factuurregels. Maak eventueel ook gebruik van de debugmogelijkheden (Foutopsporing) om te zien wat er stap voor stap gebeurt! 10.4 DE FACTUUR MAKEN Nu moet nog de factuur zelf worden gemaakt. De bedoeling is dat iedere keer als er op het tabblad Factuurregels op de knop [Factuur maken] (= cmdok) wordt geklikt, er een kopie van het lege factuurwerkblad wordt gemaakt waarop dan de gegevens komen te staan die in de listbox zijn verzameld. Maak de subprocedure cmdok_click() als hieronder (vergeet niet de commentaarregels te bestuderen). 'Factuurblad aanmaken door het lege factuurblad te kopiëren Sheets("Factuur").Select Sheets("Factuur").Copy After:=Sheets(2) 'Activeer het nieuwe factuurblad ActiveWorkbook.Worksheets(3).Activate 'Ga naar de goede plaats op het werkblad ActiveWorkbook.Worksheets(3).Range("Factuurregel").Select 'Vul het blad met de gegevens uit de listbox For x = 0 To Me.lstFactuur.ListCount - 1 ActiveCell.Value = x + 1 ActiveCell.Offset(0, 1) = Me.lstFactuur.Column(0, x) ActiveCell.Offset(0, 2) = Me.lstFactuur.Column(1, x) ActiveCell.Offset(0, 3) = Format(Me.lstFactuur.Column(2, x), " #,##0.00") ActiveCell.Offset(0, 4) = Format(Me.lstFactuur.Column(3, x), "0%") 'Ga naar de volgende regel ActiveCell.Offset(1, 0).Activate Next x Test het formulier en zorg ervoor dat alles goed werkt. Bewaar de werkmap FORMULES IN VBA Op de factuur moeten ook de totaalbedragen worden uitgerekend. Dus gaan we op de juiste plaatsen formules in het nieuwe werkblad invoeren. Formules zien er in VBA-code iets anders uit dan in je Excel-werkblad. Om een idee te krijgen van hoe zo n formule in VBA wordt opgebouwd, gaan we eerst even ter illustratie een macro opnemen waarbij je een formule in een cel plaatst. 111

112 Praktijkcase: een factuurmodel Typ twee getallen ergens in een nieuw werkblad zoals in de figuur hieronder. Neem nu een nieuwe macro op waarin je een AutoSom-berekening maakt van de beide getallen. Laat vervolgens de opname stoppen. Figuur 10.6 Formule opnemen in macro Bekijk de code van de macro. ActiveCell.FormulaR1C1 = "=SUM(R[-2]C:R[-1]C)" In deze formule staat zoiets als Neem de som van de cel die 2 rijen terug (erboven) staat tot en met de cel die 1 rij terug staat. VBA gebruikt een tekenreeks om die formule samen te stellen en vervolgens in de actieve cel te plaatsen. Leiderschapsvaardigheden Leer strategisch denken en word een betere leider Download ebooks 112

113 Praktijkcase: een factuurmodel Excel gebruikt in de formule een relatieve verwijzing naar de cellen in het werkblad, terwijl we dat vooraf aan de opname niet hebben aangegeven. Mocht je dat wel hebben gedaan, dan zal de coderegel beginnen met Selection in plaats van ActiveCell, maar wat volgt is hetzelfde. De formule op een dergelijke manier noteren met ActiveCell is handig om straks het eindbedrag van de factuur uit te rekenen. We weten immers van tevoren niet hoeveel regels er in de factuur komen te staan. We kunnen de manier waarop VBA de formules opbouwt ook misbruiken om zelf tekenreeksen samen te stellen die bepalen hoe de formule eruit moet gaan zien. Het vergt wel enig fröbelwerk om de juiste tekens en reeksen aan elkaar te knopen. Deze mogelijkheid gaan we nu gebruiken om aan het eind van iedere factuurregel het totaal uit te rekenen (het bedrag exclusief en inclusief btw). Sluit de nieuwe werkmap (bewaren hoeft niet) en keer terug naar werkmap Factuur. Voeg in de sub cmdok_click(), vlak voor de instructie om naar de volgende regel te gaan (dus nog binnen de lus met als teller x), de onderstaande code toe. ActiveCell.Offset(0, 5).Formula = "=B" & x + 4 & "*D" & x + 4 ActiveCell.Offset(0, 6).Formula = "=F" & x + 4 & "*(1+E" & x + 4 & ")" Kijk goed hoe met deze constructie de tekenreeks voor de formule wordt samengesteld. Voer de procedure even uit en zie wat er voor formules zijn ontstaan in de toegevoegde kopie van werkblad Factuur. Nu het totaalbedrag van de factuur. Wanneer de factuurregels zijn toegevoegd en de factuur klaar is, moet dat als laatste onderaan worden geplaatst! We weten van tevoren niet hoeveel regels er bij elkaar moeten worden opgeteld, want dit is afhankelijk van het aantal factuurregels dat door de gebruiker is ingevoerd. Maar we kunnen wel gebruikmaken van de variabele x, die we in de For-Next-lus in de bovenliggende code al hebben gebruikt. Zet de onderstaande regels code op de juiste plaats in het programma. 'Totaalbedrag van de factuur berekenen ActiveCell.Offset(1, 6).Activate ActiveCell.Formula = "=SUM(R[-" & x + 1 & "]C:R[-2]C)" 113

114 Praktijkcase: een factuurmodel Test het geheel nog eens, en kijk hoe alle formules er in VBA-code uitzien als je bijvoorbeeld 3 of 4 factuurregels aan de factuur toe hebt gevoegd. Verwijder de (tijdelijke) factuurbladen die tijdens de test worden aangemaakt FACTUURNUMMERS Stel, je wilt dat alle facturen een uniek factuurnummer krijgen. Daarvoor moeten we eerst op de lege factuur aangeven waar dat nummer moet komen te staan. We kiezen voor cel A3, en die geven we de naam Factuurnummer. Op het tabblad Prijslijst typen we vervolgens in cel E2 (met daarboven in E1 een verklarende tekst) het factuurnummer waarmee je wilt beginnen en geven die cel de naam Nummer. Deze cel gebruiken we ook steeds om het laatst gebruikte factuurnummer in te bewaren. Geef cel A3 op tabblad Factuur de naam Factuurnummer. Zet in cel E2 van tabblad Prijslijst het huidige factuurnummer (bijvoorbeeld het huidige jaartal met een volgnummer 001 erachter), en zet in E1 erboven: Laatste factuurnummer. Hieronder staat de benodigde code om de factuurnummers op de facturen te krijgen. Voeg de code op de juiste plaats in. 'Factuurnummer invoegen ActiveWorkbook.Worksheets(3).Range("Factuurnummer") _ = ActiveWorkbook.Worksheets(2).Range("Nummer") 'Factuurnummer op tabblad Prijslijst met 1 ophogen ActiveWorkbook.Worksheets(2).Range("Nummer") _ = ActiveWorkbook.Worksheets(2).Range("Nummer") + 1 Let nog even op de schrijfwijze hierboven van de lange regels code: als je een programmaregel over meerdere regels in het codevenster wilt spreiden, plaats je aan het einde een spatie en een underscore _ en ga je op de volgende regel (eventueel ingesprongen) verder. VBA beschouwt het dan als één regel BEVEILIGING Het is natuurlijk beter als niet iedereen het factuurnummer (en misschien ook de prijzen) op het tabblad Prijslijst kan wijzigen. Om dat te voorkomen kun je het werkblad Prijslijst beveiligen met een wachtwoord. Maar hoe gaat VBA daarmee om? Stel voor het werkblad Prijslijst (dus niet de hele werkmap) op tab Controleren een wachtwoordbeveiliging in. Gebruik het wachtwoord geheim in kleine letters. Voer het programma uit. Als je de procedure doorloopt en aan het eind een factuur wilt maken, krijg je een foutmelding. 114

115 Praktijkcase: een factuurmodel Figuur 10.7 Foutmelding beveiliging Je moet nu dus in de code ook regelen dat het programma eerst de beveiliging opheft voordat de waarde van het laatstgebruikte factuurnummer in de cel Nummer kan worden weggeschreven. En daarna moet de beveiliging opnieuw worden ingesteld. Regel het met de volgende opdracht. Zet de onderstaande twee coderegels op de juiste plaats in de programmalisting. Communicatieve vaardigheden Leer effectief communiceren Download ebooks 115

116 Praktijkcase: een factuurmodel ActiveWorkbook.Worksheets(2).Unprotect Password:="geheim" ActiveWorkbook.Worksheets(2).Protect Password:="geheim" Test het programma nog eens. Controleer of het factuurnummer is opgehoogd, en of de beveiliging weer is ingesteld INTERFACE Tot slot van deze module met de praktijkcase voor facturatie, voegen we nog even wat elementen toe om er voor te zorgen dat gebruikers op een prettige manier met je applicatie kunnen werken. Bijvoorbeeld met behulp van opdrachtknoppen in de interface (de gebruikersomgeving) kun je het gebruik van het programma regelen en verduidelijken. Voeg onder het tabbesturingselement in het formulier een knop [Annuleren] toe je zult er misschien ruimte voor moeten maken die zorgt dat het formulier wordt gesloten zonder dat er een factuur wordt gemaakt. Voorzie de knop van de juiste code (weet je het nog?). Figuur 10.8 Knop Annuleren Ga naar het werkblad Prijslijst, hef de beveiliging op, en plaats er een opdrachtknop (bijvoorbeeld onder het factuurnummer), waarmee de gebruiker het formulier opent om een factuur te maken. Stel de beveiliging weer in en test het programma met de toegevoegde knoppen. Figuur 10.9 Knop om een factuur te maken 116

117 Praktijkcase: een factuurmodel 10.7 EXTRA OEFENING Bij het werken met een facturatieprogramma zullen er gebruikers zijn die alleen facturen uitdraaien en anderen die zich bezighouden met de prijzen en de artikelen, en weer andere personen die de facturatienummering mogen bepalen. In heel wat gevallen is het ongewenst dat alle gebruikers zomaar overal bij kunnen. Je zag dat we bepaalde zaken kunnen beveiligen in Excel, maar de mogelijkheden zijn niet zo uitgebreid als bijvoorbeeld in een bedrijfsnetwerk of in een databaseprogramma als Access. In zulke omgevingen heeft iedere gebruiker dan zijn eigen wachtwoord en zijn eigen rechten. Maar binnen die beperkte mogelijkheden zijn er toch ook nog wel wat trucjes die je uit kunt halen om te voorkomen dat iedereen zomaar alles doelbewust of per ongeluk aan kan passen. Maak een knop aan in het werkblad Prijslijst met als caption Prijslijst bewerken zoals in figuur Voorzie die knop van de onderstaande code. Time management Tips om je tijd effectiever te gebruiken! Download ebooks 117

118 Praktijkcase: een factuurmodel Sub Bewerken() If InputBox("Wachtwoord") = "excel" Then MsgBox "Goed geraden, je mag doorgaan!" ActiveWorkbook.Worksheets(2).Unprotect Password:="geheim" ActiveSheet.ShowDataForm ActiveWorkbook.Worksheets(2).Protect Password:="geheim" Else MsgBox "Toegang geweigerd", vbexclamation End If End Sub Figuur Prijslijst bewerken 118

119 Praktijkcase: een factuurmodel Test het programma en zie wat de code voor je doet (zo n formuliertje kende je natuurlijk al uit het werkboek Modelontwerp uit deze reeks). Denk ten slotte nog even na over de volgende zaken: Met welk wachtwoord kun je uiteindelijk de prijslijst bewerken? Kun je na het bewerken (knop [Sluiten] van het Dataformulier) nog iets wijzigen in het werkblad? Waarom moet je toch een komma gebruiken als je prijzen invoert via het gegevensformulier (dat zelf het decimaalteken als punt laat zien)? Hoe krijg je een gesorteerde productenlijst? Sluit en bewaar de werkmap. Leiderschapsvaardigheden Leer strategisch denken en word een betere leider Download ebooks 119

120 Grafieken in VBA 11 GRAFIEKEN IN VBA 11.1 INLEIDING VBA in Excel biedt ook tal van mogelijkheden om grafieken te maken, te benaderen of te bewerken. In dit laatste hoofdstuk bekijken we een vereenvoudigd voorbeeld met een grafiek van een verhuurorganisatie voor fietsen, e-fietsen en brommers. In een grafiek moet te zien zijn hoe de verhuur de afgelopen week is verlopen (bijvoorbeeld om te helpen beslissen in welke producten te investeren). We maken de grafiek volledig met behulp van VBA-code om je te laten zien hoe je met deze objecten om kunt gaan DE WERKMAP Het verhuurbedrijf houdt in een werkmap bij hoeveel fietsen, e-fietsen en brommers er in een week zijn verhuurd. In het model zijn drie knopjes voor de gebruiker om de resultaten van een van de categorieën in een grafiek te laten zien. De oude grafiek wordt daarvoor eerst verwijderd. Die werkmap houden we nu natuurlijk even simpel. Maak een nieuwe werkmap aan en sla die op als Verhuurgrafiek (met macro s). Zorg dat de werkmap drie werkbladen heeft met de namen Fietsen, E-fietsen en Brommers. Selecteer de drie bladen (met [Shift]) en voer in één keer op alle bladen de volgende gegevens in. Figuur 11.1 Groep werkbladen vullen Zet willekeurige aantallen tussen 1 en 10 in de cellen B2:B8 op elk blad. Selecteer de cellen A1:B8 van het eerste werkblad en geef de reeks de naam Fietsen. Geef de vergelijkbare reeksen op het tweede en derde blad de namen Efietsen en Brommers. 120

121 Grafieken in VBA Gebruik van een koppelteken in de naam van een reeks is niet toegestaan, vandaar dat de bereiknaam Efietsen zonder streepje moet DE CODE We gaan nu de code schrijven om van de gegevens een grafiek te maken. Later worden knoppen toegevoegd die als functie hebben de code aan te roepen. Open de VBA-editor en voeg een module in met de naam modgrafiek. Typ er de volgende instructies en procedures. Option Explicit Sub Fietsen() On Error Resume Next Dim ChartRange As Range Dim Chart1 As Chart Charts(1).Delete Worksheets("Fietsen").Activate Range("Fietsen").Select Set ChartRange = Selection Set Chart1 = Charts.Add Call Wizard(ChartRange, Chart1, "Fietsen") Charts(1).Move after:=sheets(sheets.count) End Sub Sub Wizard(ChartRange As Range, ChartVar As Object, titel As String) ChartVar.ChartWizard _ Source:=ChartRange, Gallery:=xl3DColumn, Format:=6, _ PlotBy:=xlColumns, CategoryLabels:=1, SeriesLabels:=1, _ HasLegend:=False, Title:=titel End Sub DE UITLEG Na de declaratie van de variabelen wordt met behulp van het commando Charts(1). Delete een eventueel al ingevoegde grafiek verwijderd. Daarna wordt het eerste werkblad geactiveerd en het bereik Fietsen geselecteerd. De variabele ChartRange wordt gevuld met het bereik van de selectie. Met Set Chart1 = Charts.Add wordt een grafiek aangemaakt en in de variabele Chart1 geplaatst. 121

122 Grafieken in VBA Merk in de subprocedure Fietsen() de bijzondere variabelentypen op die je kunt gebruiken: Range en Chart. Zoek eventueel meer informatie op over deze typen. Call Wizard(ChartRange, Chart1, "Fietsen" ) roept de subprocedure Wizard aan en geeft het bereik van de grafiek (ChartRange), de Grafiek (Chart1) en de titel van de grafiek ( Fietsen ) door aan de subprocedure Wizard. Met behulp van het commando Charts(1).Move after:=sheets(sheets.count) wordt de toegevoegde grafiek aan het eind van de werkbladen geplaatst. De sub Wizard regelt de instellingen van de grafiek. Behalve het bereik, de grafiek en de titel wordt hier aangegeven dat de grafiek van het type 3D-Kolommen is, geen legenda heeft, dat de eerste kolom de categorielabels bevat en de eerste rij de serielabels. Voeg de vergelijkbare code toe voor de subprocedure E-fietsen en Brommers. Let goed op de bladen en reeksen die moeten worden geselecteerd in de procedures. O ja, en merk hoe dat streepje van E-fietsen in de weg kan zitten. Voeg waar nodig commentaarregels aan de broncode toe. Communicatieve vaardigheden Leer effectief communiceren Download ebooks 122

123 Grafieken in VBA 11.3 GEBRUIK Het VBA-gedeelte voor deze kleine applicatie is af. Ondertussen weet je dat er diverse manieren zijn om de VBA-code te laten uitvoeren in de gebruiksomgeving (interface); de mogelijkheid die we hier toepassen, is een aanpassing van het lint. Maak in het lint rechts van tab Start een nieuwe tab Verhuurgrafieken met één groep Categorieën. Voeg er de drie subs als macro s aan toe en geef ze een passende weergavenaam. Ken er eventueel ook een aardig pictogrammetje aan toe (maar je keuze is hier toch wel erg beperkt). Figuur 11.2 Knoppen op een eigen tab in het lint Test het programma: probeer de knoppen in het lint uit. Nadeel van het aanpassen van het lint is dat de wijziging van toepassing blijft in Excel als het bestand Verhuurgrafiek niet meer is geopend. Dat probleem ben je al eerder tegengekomen. Een alternatief kan zijn dat je op alle drie de tabbladen een knop plaatst die de bijbehorende grafiek genereert op het grafiekblad. Als er bij het uitvoeren (testen) van je programma elke keer dat je een grafiek wilt laten maken een dialoogvenster verschijnt in verband met het verwijderen van een al bestaand grafiekblad, dan moet je zo n venstertje iedere keer wegklikken. 123

124 Grafieken in VBA Figuur 11.3 Melding werkblad verwijderen Maar je mag ook in de code aangeven dat je (tijdelijk) dit soort meldingen van het programma niet wilt zien. Rondom het verwijdercommando plaats je dan de volgende code: Application.DisplayAlerts = False Charts(1).Delete Application.DisplayAlerts = True Dit zorgt ervoor dat de melding zoals in figuur 11.3 niet verschijnt bij het verwijderen van het grafiekblad, maar alle volgende meldingen eventueel weer wel. Mocht je het voor alle grafieken willen regelen, dan zul je de twee coderegels dus in alle subs moeten invoegen. Pas de code aan (als je de verwijdermelding tenminste wilt onderdrukken), en test je programma nogmaals. Fraai toch? Sluit (en bewaar) de werkmap. 124

Hoofdstuk 19: Macro s

Hoofdstuk 19: Macro s Hoofdstuk 19: Macro s 19.0 Inleiding Als je steeds dezelfde actie moet uitvoeren in Excel, dan kan het de moeite waard zijn om in plaats daarvan een macro uit te voeren (afgeleid van het Griekse "μάκρο",

Nadere informatie

9.18 Macro s: oefeningen

9.18 Macro s: oefeningen 9.18 Macro s: oefeningen Oefening 77.: Macro relatief opnemen Open een nieuwe map. Plaats uw invoercel ergens in de linker-bovenhoek van het blad (bijvoorbeeld in B2). Start het opnemen van een macro met

Nadere informatie

9.19 Macro s: oefeningen

9.19 Macro s: oefeningen 9.19 Macro s: oefeningen Oefening 84.: Macro relatief opnemen Open een nieuwe map. Plaats uw invoercel ergens in de linker-bovenhoek van het blad (bijvoorbeeld in B2). Start het opnemen van een macro met

Nadere informatie

VBA voor doe-het-zelvers

VBA voor doe-het-zelvers VBA voor doe-het-zelvers Handleiding van Auteur: Leofact December 2013 Inleiding VBA is de taal die Microsoft heeft ontwikkeld om taken voor het MS office pakket te automatiseren, of om er nieuwe functies

Nadere informatie

Taken automatiseren met Visual Basicmacro's

Taken automatiseren met Visual Basicmacro's Taken automatiseren met Visual Basicmacro's Als u niet bekend bent met macro's, moet u zich niet hierdoor laten afschrikken. Een macro is een opgenomen set toetsaanslagen en instructies waarmee u een taak

Nadere informatie

Hoofdstuk 23: Eenvoudig taken automatiseren met macro s

Hoofdstuk 23: Eenvoudig taken automatiseren met macro s Hoofdstuk 23: Eenvoudig taken automatiseren met macro s 23.0 Inleiding Macro s kunnen gebruikt worden om wat je doet in Word te automatiseren. Ze kunnen geschreven worden met Visual Basic for Applications

Nadere informatie

25 Excel tips. 25 Handige Excel tips die tijd besparen en fouten voorkomen. Ir. Fred Hirdes. Excel-leren.nl.

25 Excel tips. 25 Handige Excel tips die tijd besparen en fouten voorkomen. Ir. Fred Hirdes. Excel-leren.nl. [Geef tekst op] 25 Excel tips 25 Handige Excel tips die tijd besparen en fouten voorkomen Ir. Fred Hirdes Excel-leren.nl info@excel-helpdesk.nl Inhoudsopgave Inhoudsopgave... 1 Inleiding... 2 Tip 1 tm

Nadere informatie

Microsoft Word Kolommen en tabellen

Microsoft Word Kolommen en tabellen Microsoft Word 2010 Kolommen en tabellen Inhoudsopgave 8. Kolommen en tabellen 8.1 Tabtoets en tabstops 8.2 Tabellen maken 8.3 Tabel selecteren en tekst opmaken 8.4 Kolommen en rijen invoegen en verwijderen

Nadere informatie

II. ZELFGEDEFINIEERDE FUNCTIES

II. ZELFGEDEFINIEERDE FUNCTIES II. ZELFGEDEFINIEERDE FUNCTIES In Excel bestaat reeds een uitgebreide reeks van functies zoals SOM, GEMIDDELDE, AFRONDEN, NU enz. Het is de bedoeling om functies aan deze lijst toe te voegen door in Visual

Nadere informatie

Via de het tabblad Bestand kun je bijvoorbeeld een nieuwe werkmap maken, werkmappen openen, opslaan en afdrukken.

Via de het tabblad Bestand kun je bijvoorbeeld een nieuwe werkmap maken, werkmappen openen, opslaan en afdrukken. SAMENVATTING HOOFDSTUK 1 Excel opstarten, verkennen en afsluiten EXCEL kan bijvoorbeeld worden opgestart via de snelkoppeling naar EXCEL op het bureaublad, als deze er is, of via of. Als EXCEL al vaker

Nadere informatie

Hoofdstuk 1: Het Excel Dashboard* 2010

Hoofdstuk 1: Het Excel Dashboard* 2010 Hoofdstuk 1: Het Excel Dashboard* 2010 1.0 Introductie Excel helpt om data beter te begrijpen door het in cellen (die rijen en kolommen vormen) in te delen en formules te gebruiken om relevante berekeningen

Nadere informatie

Van macrorecorder door naar VBA

Van macrorecorder door naar VBA Van macrorecorder door naar VBA Geo van Dijk Excel Experience Day 2014 Opbouw van de sessie Waarom macro s/ VBA? VBA procedures opnemen met de macrorecorder. De VBA Editor (VBE). Macro s opnemen die van

Nadere informatie

Datum. Vraag het bedrag in BEF. Reken om naar EURO. Toon het bedrag in EURO. --- Vraag het bedrag in BEF--- --- Reken om naar EURO---

Datum. Vraag het bedrag in BEF. Reken om naar EURO. Toon het bedrag in EURO. --- Vraag het bedrag in BEF--- --- Reken om naar EURO--- 3UREOHPHQRSORVVHQPHW9%$WRHSDVVLQJHQELMGHHO Naam. NR : Klas. PC : Datum. 23*$9( Hieronder vind je het algoritme om een bedrag in BEF om te rekenen naar EURO. Zet het algoritme om in programmacode. Noem

Nadere informatie

Microsoft Word Kennismaken

Microsoft Word Kennismaken Microsoft Word 2013 Kennismaken Inleiding Microsoft Word is het meest gebruikte tekstverwerkingsprogramma ter wereld. De mogelijkheden die Word biedt zijn talrijk, maar als je nog nooit met Word gewerkt

Nadere informatie

Macro s maken Word nog sneller

Macro s maken Word nog sneller Les 15 Macro s maken Word nog sneller In deze les leert u eenvoudige macro s opnemen en gebruiken. We gaan een macro niet alleen opnemen, maar ook aanpassen, zodat er een bestandsnaam voor het opslaan

Nadere informatie

Excel 2010, H1 HOOFDSTUK 1

Excel 2010, H1 HOOFDSTUK 1 HOOFDSTUK 1 Excel opstarten en afsluiten EXCEL kan worden opgestart via. Als EXCEL al vaker is gestart kun je direct op Microsoft Office EXCEL 2010 klikken. Typ anders in het zoekvak de eerste letters

Nadere informatie

www.digitalecomputercursus.nl 6. Reeksen

www.digitalecomputercursus.nl 6. Reeksen 6. Reeksen Excel kan datums automatisch uitbreiden tot een reeks. Dit betekent dat u na het typen van een maand Excel de opdracht kan geven om de volgende maanden aan te vullen. Deze voorziening bespaart

Nadere informatie

Basisvaardigheden Microsoft Excel

Basisvaardigheden Microsoft Excel Basisvaardigheden Microsoft Excel Met behulp van deze handleiding kun je de basisvaardigheden leren die nodig zijn om meetresultaten van een practicum te verwerken. Je kunt dan het verband tussen twee

Nadere informatie

1. Cellen en formules

1. Cellen en formules 13 1. Cellen en formules Microsoft Excel is een rekenprogramma, ook wel spreadsheetprogramma genoemd. Met het woord spread wordt in het Engels tekst over meer kolommen bedoeld en de term sheet betekent

Nadere informatie

HOOFDSTUK 1. beginnen met excel

HOOFDSTUK 1. beginnen met excel HOOFDSTUK 1 beginnen met excel Inleiding Voor het betere rekenwerk in de bedrijfseconomie worden spreadsheets (rekenbladen) gebruikt. In dit hoofdstuk leer je omgaan met algemene basisbewerkingen in Excel:

Nadere informatie

Microsoft WordPad Sinaleri Opleiding

Microsoft WordPad Sinaleri Opleiding Werken met WordPad WordPad is een zeer simpele tekstverwerker voor het schrijven en bewerken van tekstdocumenten. Het maakt standaard onderdeel uit van het Windows besturingssysteem van Microsoft. Voorwoord

Nadere informatie

INHOUDSOPGAVE. Inhoudsopgave

INHOUDSOPGAVE. Inhoudsopgave INHOUDSOPGAVE Inhoudsopgave Microsoft Word 7 Werken met het lint 7 Documenten maken en bewerken 8 In verschillende weergaven werken 11 Tekens en alinea s opmaken 13 Tekst en afbeeldingen bewerken en verplaatsen

Nadere informatie

U kunt de helpbestanden op verschillende manieren openen. Standaard activeert u de helpbestanden via de toets F1.

U kunt de helpbestanden op verschillende manieren openen. Standaard activeert u de helpbestanden via de toets F1. Les 19 Help In deze les leert u hoe u de helpbestanden van Excel gebruikt om snelle antwoorden te vinden op een aantal vragen die u over het programma hebt. Houd er echter rekening mee dat u online moet

Nadere informatie

Kennismaking. Versies. Text. Graph: Word Logo voorbeelden verschillende versies. Werkomgeving

Kennismaking. Versies. Text. Graph: Word Logo voorbeelden verschillende versies. Werkomgeving Kennismaking Word is een tekstverwerkingsprogramma. U kunt er teksten mee maken, zoals brieven, artikelen en verslagen. U kunt ook grafieken, lijsten en afbeeldingen toevoegen en tabellen maken. Zodra

Nadere informatie

6.2 VBA Syntax. Inleiding Visual Basic

6.2 VBA Syntax. Inleiding Visual Basic 6.2 VBA Syntax Wij gaan de Visual Basic Editor opnieuw openen, om de instructie die wij zojuist getypt hebben, nader te bekijken. Klik te tab Hulpmiddelen voor databases Klik op Maken Macro s en Code -

Nadere informatie

6.3 VBA Syntax Instructie. Wij gaan de Visual Basic Editor opnieuw openen, om de instructie die wij zojuist getypt hebben, nader te bekijken.

6.3 VBA Syntax Instructie. Wij gaan de Visual Basic Editor opnieuw openen, om de instructie die wij zojuist getypt hebben, nader te bekijken. 6.3 VBA Syntax Wij gaan de Visual Basic Editor opnieuw openen, om de instructie die wij zojuist getypt hebben, nader te bekijken. Klik te tab Hulpmiddelen voor databases Klik in het groepsvak Macro op

Nadere informatie

Basisvaardigheden Microsoft Excel

Basisvaardigheden Microsoft Excel Basisvaardigheden Microsoft Excel Met behulp van deze handleiding kun je de basisvaardigheden leren die nodig zijn om meetresultaten van een practicum te verwerken. Je kunt dan het verband tussen twee

Nadere informatie

Microsoft Word 365. Kolommen en tabellen AAN DE SLAG MET DIGITALE VAARDIGHEDEN TRAINING: MICROSOFT WORD 365

Microsoft Word 365. Kolommen en tabellen AAN DE SLAG MET DIGITALE VAARDIGHEDEN TRAINING: MICROSOFT WORD 365 Microsoft Word 365 Kolommen en tabellen Inhoudsopgave 8. Kolommen en tabellen 8.1 Tabellen maken 8.2 Tabel selecteren en tekst opmaken 8.3 Kolommen en rijen invoegen en verwijderen 8.1 Tabellen maken Met

Nadere informatie

Basis Excel cursus 2013

Basis Excel cursus 2013 Basis Excel cursus 2013 Learnit Training Gratis cursus Excel 2013 Deze Learnit cursus is ontwikkeld om u een indruk te geven van het rekenprogramma Excel 2013 en haar mogelijkheden. In zes lessen leert

Nadere informatie

Teksten op je WordPress site zetten of aanpassen

Teksten op je WordPress site zetten of aanpassen www.smitloopbaan.nl/beheer/ Teksten op je WordPress site zetten of aanpassen Je kunt met WordPress op 2 manieren teksten en afbeeldingen op je website plaatsen : op een pagina of in een bericht. De vaste

Nadere informatie

Briefhoofd maken in Word. Handleiding van Helpmij.nl

Briefhoofd maken in Word. Handleiding van Helpmij.nl Briefhoofd maken in Word Handleiding van Auteur: CorVerm Januari 2011 We gaan ons deze keer wagen aan het maken van een briefhoofd met invulformulier in Word. De bedoeling is dat we eerst een briefhoofd

Nadere informatie

Een macro met een knop opstarten.

Een macro met een knop opstarten. Een macro met een knop opstarten. Introductie Dit document is een werkinstructie voor het maken van een knop op een Excel-werkblad om daarmee een macro of een Visual Basic for Applications (VBA) toepassing

Nadere informatie

Microsoft Word 365. Kennismaken AAN DE SLAG MET DIGITALE VAARDIGHEDEN TRAINING: MICROSOFT WORD 365

Microsoft Word 365. Kennismaken AAN DE SLAG MET DIGITALE VAARDIGHEDEN TRAINING: MICROSOFT WORD 365 Microsoft Word 365 Kennismaken Inleiding Microsoft Word is het meest gebruikte tekstverwerkingsprogramma ter wereld. De mogelijkheden die Word biedt zijn talrijk, maar als je nog nooit met Word gewerkt

Nadere informatie

Het uiterlijk lijkt erg op Word, een paar belangrijke verschillen geven we aan in de schermafdruk hieronder.

Het uiterlijk lijkt erg op Word, een paar belangrijke verschillen geven we aan in de schermafdruk hieronder. Inleiding Rekenen is een onderdeel van iedere opleiding. Het programma waar je mee kunt rekenen op de computer is het programma Excel, onderdeel van Microsoft Office. Excel is een krachtig rekenprogramma.

Nadere informatie

INHOUD. Ten geleide 13. 1 Excel 2007-2010 Basis 15

INHOUD. Ten geleide 13. 1 Excel 2007-2010 Basis 15 INHOUD Ten geleide 13 1 Excel 2007-2010 Basis 15 1.1 Inleiding 15 1.2 Excel 2007-2010 samengevat 15 1.2.1 Configuratie instellen en de werkomgeving aanpassen 15 1.2.1.1 Een knop toevoegen aan de werkbalk

Nadere informatie

1. Kennismaken met Calc

1. Kennismaken met Calc 1. Kennismaken met Calc In deze module leert u: - het programma Calc starten. - de onderdelen van het programmavenster van Calc herkennen. - over het werkblad verplaatsen. - gegevens invoeren. - het programma

Nadere informatie

1. Kennismaken met Impress

1. Kennismaken met Impress 1. Kennismaken met Impress In deze module leert u: 1 Wat Impress is; 2 Impress starten; 3 Een nieuwe presentatie maken; 4 Instellingen van Impress wijzigen; 5 Opslaan en openen. 1 Wat is Impress? OpenOffice.org

Nadere informatie

De knoppen op het lint verkennen Elk tabblad op het lint bevat groepen en elke groep bevat een reeks gerelateerde opdrachten.

De knoppen op het lint verkennen Elk tabblad op het lint bevat groepen en elke groep bevat een reeks gerelateerde opdrachten. Beknopte handleiding Microsoft Excel 2013 ziet er anders uit dan de vorige versies. Daarom hebben we deze handleiding gemaakt, zodat u sneller vertrouwd raakt met het programma. Opdrachten toevoegen aan

Nadere informatie

De knoppen op het lint verkennen Elk tabblad op het lint bevat groepen en elke groep bevat een reeks gerelateerde opdrachten.

De knoppen op het lint verkennen Elk tabblad op het lint bevat groepen en elke groep bevat een reeks gerelateerde opdrachten. Beknopte handleiding Microsoft Excel 2013 ziet er anders uit dan de vorige versis. Daarom hebben we deze handleiding gemaakt, zodat u sneller vertrouwd raakt met het programma. Opdrachten toevoegen aan

Nadere informatie

Afdrukken in Calc Module 7

Afdrukken in Calc Module 7 7. Afdrukken in Calc In deze module leert u een aantal opties die u kunt toepassen bij het afdrukken van Calc-bestanden. Achtereenvolgens worden behandeld: Afdrukken van werkbladen Marges Gedeeltelijk

Nadere informatie

Met een mailing of massaverzending kunt u een groot aantal documenten verzenden naar gebruikelijke adressen, die in een gegevensbestand staan.

Met een mailing of massaverzending kunt u een groot aantal documenten verzenden naar gebruikelijke adressen, die in een gegevensbestand staan. Een mailing verzorgen Met een mailing of massaverzending kunt u een groot aantal documenten verzenden naar gebruikelijke adressen, die in een gegevensbestand staan. Voor deze techniek zijn twee bestanden

Nadere informatie

Automatisch handelingen uitvoeren

Automatisch handelingen uitvoeren Excellerend Heemraadweg 21 2741 NC Waddinxveen 06 5115 97 46 richard@excellerend.nl BTW: NL0021459225 BANK: NL72ABNA0524989982 KVK: 24389967 Automatisch handelingen uitvoeren Wanneer je periodiek in Excel

Nadere informatie

INSTRUCT Samenvatting Basis Word 2010, H1 SAMENVATTING HOOFDSTUK 1

INSTRUCT Samenvatting Basis Word 2010, H1 SAMENVATTING HOOFDSTUK 1 SAMENVATTING HOOFDSTUK 1 Word opstarten en afsluiten WORD kan opgestart worden via de startknop en de snelkoppeling in de lijst die boven de startknop staat: WORD kan ook worden opgestart via menu Start,

Nadere informatie

HANDLEIDING PROGRAMMEREN IN PASCAL (LAZARUS)

HANDLEIDING PROGRAMMEREN IN PASCAL (LAZARUS) HANDLEIDING PROGRAMMEREN IN PASCAL (LAZARUS) Vereiste voorkennis Voldoende kennis van het besturingssysteem (in deze handleiding wordt uitgegaan van Windows) De basisprincipes van programmeren Vereiste

Nadere informatie

Basistechnieken Microsoft Excel in 15 minuten

Basistechnieken Microsoft Excel in 15 minuten Basistechnieken Microsoft Excel in 15 minuten Microsoft Excel is een rekenprogramma. Je kan het echter ook heel goed gebruiken voor het maken van overzichten, grafieken, planningen, lijsten en scenario's.

Nadere informatie

VBA voor Doe het Zelvers deel 12

VBA voor Doe het Zelvers deel 12 VBA voor Doe het Zelvers deel 12 Handleiding van Auteur: leofact November 2014 VBA voor Doe het Zelvers is een reeks artikelen, bedoelt voor mensen die met VBA in Excel aan de slag willen om taken te automatiseren

Nadere informatie

SNELLE INVOER MET EXCEL

SNELLE INVOER MET EXCEL SNELLE INVOER MET EXCEL Naam Nr Klas Datum Het is de bedoeling dat je de gegevens van een tabel op efficiënte wijze invoert, dat betekent: correct en snel! Microsoft Excel biedt verscheidene mogelijkheden

Nadere informatie

Excel. Inleiding. Het meest gebruikte spreadsheet programma is Excel.

Excel. Inleiding. Het meest gebruikte spreadsheet programma is Excel. Excel Inleiding Het woord computer betekent zoiets als rekenmachine. Daarmee is is eigenlijk aangegeven wat een computer doet. Het is een ingewikkelde rekenmachine. Zelf voor tekstverwerken moet hij rekenen.

Nadere informatie

Instructie voor een mail-merge VZVZ toestemmingsformulier in Word.

Instructie voor een mail-merge VZVZ toestemmingsformulier in Word. Instructie voor een mail-merge VZVZ toestemmingsformulier in Word. NB: Voor deze instructie is gebruik gemaakt van Office 2016 op een Windows 7 computer; de taal staat ingesteld op Nederlands. In grote

Nadere informatie

1 De werkmap beschermen

1 De werkmap beschermen 1 De werkmap beschermen Er zijn veel redenen om een werkmap, of delen ervan, te willen afschermen of beschermen. Het kan zijn dat delen van een werkblad gegevens bevatten die nodig zijn bij een berekening,

Nadere informatie

Excel 2013 Snelstartgids

Excel 2013 Snelstartgids Beknopte handleiding Microsoft Excel 2013 ziet er anders uit dan de vorige versies. Daarom hebben we deze handleiding gemaakt, zodat u sneller vertrouwd raakt met het programma. Pagina 1 van 6 Aan de slag

Nadere informatie

Sjablonen aanmaken, formulieren aanmaken, macro s maken, menubalk aanpassen.

Sjablonen aanmaken, formulieren aanmaken, macro s maken, menubalk aanpassen. Tips en trucs, zoals o.m.: Sjablonen aanmaken, formulieren aanmaken, macro s maken, menubalk aanpassen. door Gerrit Tiemens, HCC afdeling Arnhem, Medewerker locatie Arnhem Zevenaar, 9 november 2003 Inhoudsopgave

Nadere informatie

Excel: jaarkalender maken, bevat voorw. opmaak opties

Excel: jaarkalender maken, bevat voorw. opmaak opties Excel: jaarkalender maken, bevat voorw. opmaak opties Handleiding van Auteur: CorVerm Januari 2011 handleiding: Excel: jaarkalender maken, bevat voorw. opmaak opties In dit artikel leggen we aan de hand

Nadere informatie

Korte inleiding Excel

Korte inleiding Excel Korte Inleiding Excel, het verwerken van meetresultaten 1 Korte inleiding Excel ten behoeve van het verwerken van meetresultaten. In deze korte cursus zullen we leren hoe we het spreadsheet-(rekenvel-)programma

Nadere informatie

VBA voor Doe het Zelvers deel 5

VBA voor Doe het Zelvers deel 5 VBA voor Doe het Zelvers deel 5 Handleiding van Auteur: leofact April 2014 handleiding: VBA voor Doe het Zelvers deel 5 VBA voor Doe het Zelvers is een reeks artikelen, bedoelt voor mensen die met VBA

Nadere informatie

Programmeren in Excel 2016 met VBA

Programmeren in Excel 2016 met VBA Programmeren in Excel 2016 met VBA Kosten: 995,- excl. BTW per deelnemer Duur: 3 dagen Max Deelnemers: 10 Programmeren in Excel 2016 met VBA is een praktijkgerichte driedaagse training. Je maakt kennis

Nadere informatie

Opstarten Word 2013 bij Windows 7 Opstarten Word 2016 bij Windows 10

Opstarten Word 2013 bij Windows 7 Opstarten Word 2016 bij Windows 10 SAMENVATTING HOOFDSTUK 1 Word opstarten, verkennen en afsluiten WORD kan opgestart worden via de startknop en de snelkoppeling in de lijst die boven de startknop staat: Opstarten Word 2013 bij Windows

Nadere informatie

10. Mijn eerste programma

10. Mijn eerste programma 10. Mijn eerste programma Een korte handleiding voor het invoeren en editten van programmatekst voor een pseudotaal programma. In dit hoofdstuk wordt beschreven hoe je je allereerste pseudotaal programma

Nadere informatie

HANDLEIDING POWERPOINT 2010

HANDLEIDING POWERPOINT 2010 HANDLEIDING POWERPOINT 2010 Ella Wynants & Caroline Nijsmans THOMAS MORE KEMPEN Turnhout Inleiding Dit zijn allerlei handelingen die je vaker zult moeten gebruiken. Je weet al een manier om dit te doen

Nadere informatie

DOCUMENT SAMENSTELLEN

DOCUMENT SAMENSTELLEN Pagina 168 7 In dit hoofdstuk gaat u een nieuwsbrief maken met behulp van een sjabloon. De artikelen die in de nieuwsbrief worden opgenomen zijn al geschreven. U hoeft de tekst alleen nog naar de juiste

Nadere informatie

Startgids 061 Nieuw product aanmaken en wijzigen

Startgids 061 Nieuw product aanmaken en wijzigen Startgids 061 Nieuw product aanmaken en wijzigen In deze startgids wordt uitleg gegeven hoe u nieuwe producten kunt aanmaken en wijzigen in de Safe Concept webapplicatie. Inhoud Een nieuw product aanmaken

Nadere informatie

Minder bekende functies in Excel

Minder bekende functies in Excel Minder bekende functies in Excel Handleiding van Auteur: CorVerm Maart 2011 Datum/tijd plaatsen in een cel Om de datum van vandaag in een cel weer te geven gebruik je de functie =VANDAAG(), weergeven van

Nadere informatie

Excel voor de beginner (4) Handleiding van Helpmij.nl

Excel voor de beginner (4) Handleiding van Helpmij.nl Excel voor de beginner (4) Handleiding van Auteur: CorVerm Juni 2008 Excel voor beginners deel 4. Zoals we in deel drie hebben beloofd gaan we het in deze ronde hebben over het geven van namen aan (een)

Nadere informatie

Rekenblad (Calc) Invoer van gegevens. Les1: Het programmavenster. De werkmap

Rekenblad (Calc) Invoer van gegevens. Les1: Het programmavenster. De werkmap Rekenblad (Calc) Invoer van gegevens Met behulp van een rekenblad of spreadsheet kan je een groot aantal getallen invoeren, de computer hiermee laten rekenen en de bekomen resultaten verder verwerken.

Nadere informatie

Informatica Software PO: Excel

Informatica Software PO: Excel 2015 Informatica Software PO: Excel Casper Schulte Klas: C4V3 1-3-2015 INLEIDING Ik heb voor mijn Software PO Excel gekozen. Ik kon naast Excel ook andere software programma s kiezen zoals: video bewerking

Nadere informatie

Grafieken in Word. Soort 1 2 5 10 12 15 20 30 Leven 4,8 4,9 5,1 5,5 5,6 5,8 6,0 6,2 Annuïteiten 4,9 5,1 5,3 5,7 5,8 6,0 6,2 6,5

Grafieken in Word. Soort 1 2 5 10 12 15 20 30 Leven 4,8 4,9 5,1 5,5 5,6 5,8 6,0 6,2 Annuïteiten 4,9 5,1 5,3 5,7 5,8 6,0 6,2 6,5 Les 16 Grafieken in Word In deze les leert u hoe u gegevens weergeeft in de vorm van een grafiek. Ook past u het uiterlijk, de schaal en het type grafiek aan. Een grafiek maken Eén plaatje zegt meer dan

Nadere informatie

Technische Fiche om een commando met een passend icoontje aan te maken in de Ribbon Interface.

Technische Fiche om een commando met een passend icoontje aan te maken in de Ribbon Interface. Technische Fiche om een commando met een passend icoontje aan te maken in de Ribbon Interface. Dit document is gebaseerd op Inventor 2011 & Windows XP. PS: Het kan zijn dat bepaalde zaken verschillen of

Nadere informatie

De celwijzer is een rechthoekig kader dat om de actieve cel zit. celwijzer

De celwijzer is een rechthoekig kader dat om de actieve cel zit. celwijzer Inhoudsopgave: De werkmap p. 1 Navigeren p. 1 Selecteren p. 2 Het hele werkblad selecteren p. 2 Gegevens invoeren p. 3 De kolombreedte aanpassen p. 3 Bladtabs p. 4 Naam tabblad wijzigingen p. 4 Invoegen

Nadere informatie

Inhoudsopgave Voorwoord 7 Nieuwsbrief 7 De website bij het boek 7 Introductie Visual Steps 8 Wat heeft u nodig? 8 Uw voorkennis 9 Bonushoofdstukken

Inhoudsopgave Voorwoord 7 Nieuwsbrief 7 De website bij het boek 7 Introductie Visual Steps 8 Wat heeft u nodig? 8 Uw voorkennis 9 Bonushoofdstukken Inhoudsopgave Voorwoord... 7 Nieuwsbrief... 7 De website bij het boek... 7 Introductie Visual Steps... 8 Wat heeft u nodig?... 8 Uw voorkennis... 9 Bonushoofdstukken... 9 Hoe werkt u met dit boek?... 10

Nadere informatie

Aan de slag met Word 2016? Ontdek de basisfuncties. Maak een nieuw document aan, typ teksten en maak het geheel vervolgens netjes op.

Aan de slag met Word 2016? Ontdek de basisfuncties. Maak een nieuw document aan, typ teksten en maak het geheel vervolgens netjes op. Word 2016 - basis Aan de slag met Word 2016? Ontdek de basisfuncties. Maak een nieuw document aan, typ teksten en maak het geheel vervolgens netjes op. Welke Word? Word 2016 is te koop als onderdeel van

Nadere informatie

15. Tabellen. 1. wat rijen, kolommen en cellen zijn; 2. rijen en kolommen invoegen; 3. een tabel invoegen en weer verwijderen;

15. Tabellen. 1. wat rijen, kolommen en cellen zijn; 2. rijen en kolommen invoegen; 3. een tabel invoegen en weer verwijderen; 15. Tabellen Misschien heeft u al eens geprobeerd om gegevens in een aantal kolommen te plaatsen door gebruik te maken van spaties, kolommen of tabs. Dat verloopt goed totdat u gegevens wilt wijzigen of

Nadere informatie

Bestanden ordenen in Windows 10

Bestanden ordenen in Windows 10 Bestanden ordenen in Windows 10 Waar heb ik dat bestand ook al weer opgeslagen? Vraagt je jezelf dat ook regelmatig af, dan is het tijd om je bestanden te ordenen. Sla bestanden op in een map met een logische

Nadere informatie

Werkbalk Snelle toegang Titelbalk. Tabbladen

Werkbalk Snelle toegang Titelbalk. Tabbladen SAMENVATTING HOOFDSTUK 1 PowerPoint verkennen POWERPOINT kan worden opgestart via. Als POWERPOINT al vaker is gestart kun je direct op Microsoft PowerPoint 2010 in het menu Start klikken. Typ anders in

Nadere informatie

Inhoudsopgave Voorwoord 5 Nieuwsbrief 5 Introductie Visual Steps 6 Wat heeft u nodig? 6 De volgorde van lezen 7 Uw voorkennis

Inhoudsopgave Voorwoord 5 Nieuwsbrief 5 Introductie Visual Steps 6 Wat heeft u nodig? 6 De volgorde van lezen 7 Uw voorkennis Inhoudsopgave Voorwoord... 5 Nieuwsbrief... 5 Introductie Visual Steps... 6 Wat heeft u nodig?... 6 De volgorde van lezen... 7 Uw voorkennis... 8 Hoe werkt u met dit boek?... 8 Website... 9 Toets uw kennis...

Nadere informatie

Excel over transponeren en een tabel. Handleiding van Helpmij.nl. Auteur: CorVerm

Excel over transponeren en een tabel. Handleiding van Helpmij.nl. Auteur: CorVerm Excel over transponeren en een tabel Handleiding van Helpmij.nl Auteur: CorVerm juli 2016 Excel: over transponeren en een tabel Transponeren Stel dat je een model hebt gemaakt om ziekmeldingen in te noteren.

Nadere informatie

VBA voor Doe het Zelvers deel 14

VBA voor Doe het Zelvers deel 14 VBA voor Doe het Zelvers deel 14 Handleiding van Auteur: leofact Januari 2015 Vorige aflevering In de vorige aflevering werd het maken van een afspraak in de Outlook-agenda met behulp van Excel- VBA besproken.

Nadere informatie

Handicom. Symbol for Windows. Image Manager. (Versie 4) Handicom, 2011, Nederland

Handicom. Symbol for Windows. Image Manager. (Versie 4) Handicom, 2011, Nederland Handicom Symbol for Windows Image Manager (Versie 4) Handicom, 2011, Nederland Inhoud Inleiding... 2 1. Image Manager hoofdscherm...3 1.1 Onderdelen van het venster...3 1.2 Het scherm veranderen...3 1.2.1

Nadere informatie

Macro s. 4.2 Een macro maken

Macro s. 4.2 Een macro maken 4.2 Een macro maken Een macro is een reeks van commando s die u kunt maken en die een programma uitvoeren. Wanneer u de macro in zijn geheel uitvoert, dan worden de acties opeenvolgend uitgevoerd. Elk

Nadere informatie

VAARDIGHEDEN EXCEL. MEETWAARDEN INVULLEN In de figuur hieronder zie je twee keer de ingevoerde meetwaarden, eerst ruw en daarna netjes opgemaakt.

VAARDIGHEDEN EXCEL. MEETWAARDEN INVULLEN In de figuur hieronder zie je twee keer de ingevoerde meetwaarden, eerst ruw en daarna netjes opgemaakt. VAARDIGHEDEN EXCEL Excel is een programma met veel mogelijkheden om meetresultaten te verwerken, maar het was oorspronkelijk een programma voor boekhouders. Dat betekent dat we ons soms in bochten moeten

Nadere informatie

Microsoft Excel. It s all about Excel - VBA

Microsoft Excel. It s all about Excel - VBA X Microsoft Excel Stap in de wereld van Visual Basic for Applications (VBA) binnen het Microsoft Office programma Excel. Leer hoe deze programmeertaal precies in elkaar zit en hoe u deze in de dagelijkse

Nadere informatie

INKIJKEXEMPLAAR WERKEN MET EXCEL. Werken met excel. Hoe? Zo!

INKIJKEXEMPLAAR WERKEN MET EXCEL. Werken met excel. Hoe? Zo! Werken met excel 1 WERKEN MET EXCEL In dit boek leer je werken met Excel. Met Excel maak je berekeningen. Het is een soort uitgebreide rekenmachine. Het boek bestaat uit 4 hoofdstukken. De eerste hoofdstukken

Nadere informatie

Inhoudsopgave. Voorwoord... 3 Sneltoetsen Excel voor windows... 4. Sneltoetsen Excel voor MAC... 6. Functietoetsen... 6

Inhoudsopgave. Voorwoord... 3 Sneltoetsen Excel voor windows... 4. Sneltoetsen Excel voor MAC... 6. Functietoetsen... 6 Inhoudsopgave Voorwoord... 3 Sneltoetsen Excel voor windows... 4 Sneltoetsen Excel voor MAC... 6 Functietoetsen... 6 Navigeren en schuiven in een blad of werkmap... 6 Afdrukvoorbeelden bekijken en afdrukken...

Nadere informatie

Handleiding Vedor-editor

Handleiding Vedor-editor Handleiding Vedor-editor Mei 2007, versie 0.9 Inhoudsopgave Inleiding... 3 Aanmelden... 4 De werkbalk... 5 Het context menu... 6 Navigeren binnen je website... 7 Tekst toevoegen en bewerken... 8 Afbeeldingen

Nadere informatie

Inrichting Systeem: Locaties & Toegang

Inrichting Systeem: Locaties & Toegang Inrichting Systeem: Locaties & Toegang EasySecure International B.V. +31(0)88 0000 083 Info@EasySecure.nl Support.EasySecure.nl v1.0 01-12-2011 In deze handleidingen worden de volgende functies binnen

Nadere informatie

Bij het opstarten van Small Basic verschijnt er de onderstaande werkomgeving.

Bij het opstarten van Small Basic verschijnt er de onderstaande werkomgeving. Small Basic - werkomgeving 1/5 Werkomgeving Bij het opstarten van Small Basic verschijnt er de onderstaande werkomgeving. Bovenaan vind je de werkbalk met opdrachtknoppen. Onder de werkbalk links kan je

Nadere informatie

2.6 Spreadsheets met Excel

2.6 Spreadsheets met Excel 2.6 Spreadsheets met Excel LEERDOEL Het beheersen van de basisprincipes van werken met spreadsheets. Werken met spreadsheets leer je alleen maar door daadwerkelijk achter een computer te gaan zitten. Deze

Nadere informatie

www.digitalecomputercursus.nl 10. Voorbeeld berekeningen maken met Excel

www.digitalecomputercursus.nl 10. Voorbeeld berekeningen maken met Excel 10. Voorbeeld berekeningen maken met Excel In de komende hoofdstukken worden een aantal voorbeelden van berekeningen die gemaakt kunnen worden in Excel uitgelicht. U kunt deze berekeningen ook zodanig

Nadere informatie

INLEIDING... 1 A FSPRAKEN... 2 INHOUDSOPGAVE...

INLEIDING... 1 A FSPRAKEN... 2 INHOUDSOPGAVE... Inhoudsopgave INLEIDING... 1 AFSPRAKEN... 2 INHOUDSOPGAVE... 3 1 WAT ALS-ANALYSE... 11 1.1 Inleiding... 11 1.2 Gegevenstabellen... 11 1.2.1... Voorbeeld... 11 1.2.2... Gegevenstabel met enkele invoervariabele...

Nadere informatie

INHOUDSOPGAVE Hoofdstuk 1: Kennismaken met Word 2010 Hoofdstuk 2: Vensters en knoppen Hoofdstuk 3: Dialoogvensters en rechtermuisknop

INHOUDSOPGAVE Hoofdstuk 1: Kennismaken met Word 2010 Hoofdstuk 2: Vensters en knoppen Hoofdstuk 3: Dialoogvensters en rechtermuisknop INHOUDSOPGAVE Hoofdstuk 1: Kennismaken met Word 2010 2 Word activeren 3 Beginscherm en het lint 4 Meer elementen van het programmavenster 5 Een programma sluiten 6 Hoofdstuk 2: Vensters en knoppen 8 Het

Nadere informatie

Hoofdstuk 2: Basis navigeren & bewerken

Hoofdstuk 2: Basis navigeren & bewerken Hoofdstuk 2: Basis navigeren & bewerken 2.0 Introductie In hoofdstuk 1 werd het Excel Dashboard uitgelegd; de verschillende componenten van de Excel interface. Dit hoofdstuk gaat over de basisfuncties

Nadere informatie

Stroomschema s maken in Word

Stroomschema s maken in Word 1 Stroomschema s maken in Word Een programma direct maken in Scratch gaat vaak wel goed als het een klein programma is. Als het programma groter en moeilijker is, is het lastig om goed te zien welk commando

Nadere informatie

Stappenplan QuickScan NOV - Beheerder

Stappenplan QuickScan NOV - Beheerder Stappenplan QuickScan NOV - Beheerder Voorbereiding Excel versies eerder dan versie 2007: 2. Ga naar de menu-optie Extra - Macro s - Beveiliging. 3. Kies voor Beveiligingsniveau Gemiddeld. 4. Sluit Excel

Nadere informatie

Computerlessen voor Senioren. Themacursus. Basis Excel. Uitgave Samenstelling: Lucien Delchambre Paul Derycke. Werken met mappen 1

Computerlessen voor Senioren. Themacursus. Basis Excel. Uitgave Samenstelling: Lucien Delchambre Paul Derycke. Werken met mappen 1 & Computerlessen voor Senioren Themacursus Basis Excel Uitgave 2010 Samenstelling: Lucien Delchambre Paul Derycke Werken met mappen 1 HANDLEIDING BASIS EXCEL 3 1 Inleiding 3 2 Belangrijke functies 8 3

Nadere informatie

6. Absolute en relatieve celadressering

6. Absolute en relatieve celadressering 6. Absolute en relatieve celadressering In deze module leert u: - Wat absolute en relatieve celadressering is; - De relatieve celadressering toepassen; - De absolute celadressering toepassen; - De absolute

Nadere informatie

Symbol for Windows BlissEditor

Symbol for Windows BlissEditor Handicom Symbol for Windows BlissEditor ( Versie 4 ) Handicom, 2006, Nederland Inhoud 1. Inleiding... 2 2. Schermopbouw van de Bliss Editor...3 2.1 Werkbalk... 3 2.2 Matrix... 4 2.3 Palet met basisvormen,

Nadere informatie

Inhoudsopgave. Deel 1 Word 13

Inhoudsopgave. Deel 1 Word 13 Inhoudsopgave Voorwoord... 7 Nieuwsbrief... 7 Introductie Visual Steps... 8 Wat heeft u nodig?... 8 Uw voorkennis... 9 De volgorde van lezen... 9 Hoe werkt u met dit boek?... 10 Website... 11 Toets uw

Nadere informatie

Activiteiten in Fidura

Activiteiten in Fidura Activiteitenmodule starten De Activiteitenmodule kan worden gestart via het kopje modules in het Hoofdscherm of door klikken met de linkermuis op de knop onderin de taakbalk. rechts (Bulk)Import inkomende

Nadere informatie

Hoofdstuk 1: Een eerste Visual Basic project

Hoofdstuk 1: Een eerste Visual Basic project Programmeren in Microsoft Visual Basic 6.0, lessenserie voor het voortgezet onderwijs HAVO/VWO David Lans, Emmauscollege, Marnix Gymnasium Rotterdam, februari 2001 Hoofdstuk 1: Een eerste Visual Basic

Nadere informatie

Publisher Handleiding

Publisher Handleiding Publisher 2010 Handleiding Inhoud 1. Wat is Publisher?... 1 2. Openen 2.1 Publisher starten... 2 2.2 Een nieuw document openen... 2 2.3 Een bestaand document openen... 3 3. Opslaan 3.1 Een document opslaan...

Nadere informatie

Programmeren in Excel VBA. Karel Nijs 2010/09

Programmeren in Excel VBA. Karel Nijs 2010/09 Programmeren in Excel VBA Karel Nijs 2010/09 Leswijze Eerst wat theorie Begeleid met (korte) oefeningen MsExcel 2003 Online hulp: http://www.ozgrid.com/vba/ http://msdn.microsoft.com/en-us/library/sh9ywfdk(vs.80).aspx

Nadere informatie