1 Anja Van Mello2 1 Inhoud 1 Inhoud Inleiding Wat is Visual Basic for Applications? Geschiedenis van Visual Basic for Applications Welke plaats heeft ...
Inhoud ................................................................................................................................................................... 2 Inleiding................................................................................................................................................................ 7 2.1 Wat is Visual Basic for Applications?................................................................................................. 7 2.2 Geschiedenis van Visual Basic for Applications ............................................................................... 7 2.3 Welke plaats heeft VBA in de andere Microsoft-programma's? .............................................. 8 Werkzaamheden automatiseren met macro’s ........................................................................................... 9 3.1 Het maken van een macro....................................................................................................................... 9 3.2 Een macro bewerken ............................................................................................................................... 11 3.3 Verwijderen van een macro.................................................................................................................. 13 3.4 Gebruik van een macro........................................................................................................................... 14 3.4.1 De macro opstarten vanuit het macro-dialoogvenster.........................................................14 3.4.2 De macro toewijzen aan een sneltoets......................................................................................14 3.4.3 De macro toewijzen aan een extra knop van één van de werkbalken...............................15 3.4.4 Het MS-Word document opstarten met een macro .............................................................18 3.5 Speciale macro’s ...................................................................................................................................... 19 3.6 Invoer van gegevens door middel van macro's...............................................................................20 3.6.1 Het maken van een Bladwijzer....................................................................................................20 3.6.2 Het plaatsen van een Bladwijzer.................................................................................................21 3.6.3 Verwijderen van een Bladwijzer..................................................................................................21 3.6.4 Een document opslaan als sjabloon.............................................................................................21 Macro’s bewerken met Visual Basic for Applications (VBA) ..............................................................25 De VBA-werkomgeving ...................................................................................................................................29 5.1 De VBA-editor en zijn onderdelen.....................................................................................................29 5.2 De projectverkenner..............................................................................................................................30 5.3 Het codevenster...................................................................................................................................... 31 5.4 Het venster ‘Eigenschappen’ ................................................................................................................32 5.5 Het venster ‘Controle’............................................................................................................................32 5.6 Het venster ‘Lokale variabelen’...........................................................................................................33 5.7 Het venster ‘Direct’................................................................................................................................35 5.8 De menubalk..............................................................................................................................................36 5.9 De Standard toolbar van VBA .............................................................................................................37 Basiselementen van de taal VBA .................................................................................................................39 6.1 De basiselementen van de VBA-taal..................................................................................................40 6.2 Een object als resultaat van een actie ............................................................................................. 41 6.3 Extra informatie opvragen over objecten, methoden en eigenschappen...............................42 6.4 Een eenvoudig voorbeeld.......................................................................................................................44 6.5 Wat kunnen we hieruit leren? .............................................................................................................45 6.5.1 Het vaste patroon in de VBA-syntax........................................................................................45 6.5.2 Hoe bespaar ik me wat typwerk? ...............................................................................................45 6.6 Aandacht voor mogelijke fouten en hun afhandeling...................................................................47 Werken met gegevens in een programma..................................................................................................51 7.1 Gegevenstypes.......................................................................................................................................... 51 7.1.1 Getallen..............................................................................................................................................52 7.1.2 Tekenreeksen...................................................................................................................................52 7.1.3 Datums................................................................................................................................................53
Informatica – Softwareontwikkeling
2
Anja Van Mello
Softwareontwikkeling
Inleiding tot VBA en het gebruik van de editor
7.1.4 Logische waarden............................................................................................................................53 7.1.5 Overige...............................................................................................................................................53 7.2 Variabelen..................................................................................................................................................53 7.3 De toekenning...........................................................................................................................................56 7.4 Constanten.................................................................................................................................................56 7.4.1 Symbolische constanten ...............................................................................................................56 7.4.2 Ingebouwde (VBA) constanten....................................................................................................57 7.5 Eigen gegevenstypes ..............................................................................................................................57 7.5.1 Het record type ..............................................................................................................................57 7.5.2 Enumeratie types ............................................................................................................................59 7.6 Het gebruik van het venster “Direct”............................................................................................... 61 7.7 Operatoren................................................................................................................................................62 7.7.1 Rekenkundige operatoren.............................................................................................................62 7.7.2 Operatoren voor tekenreeksen ..................................................................................................63 7.7.3 Operatoren voor datums...............................................................................................................63 7.7.4 Logische operatoren.......................................................................................................................64 7.8 Ingebouwde functies..............................................................................................................................64 7.8.1 Wiskundige functies.......................................................................................................................65 7.8.2 Functies voor tekenreeksen ........................................................................................................65 7.8.3 Datum/tijd functies.......................................................................................................................66 7.8.4 Conversiefuncties ...........................................................................................................................66 7.9 In- en uitvoeropdrachten .....................................................................................................................66 7.9.1 Een invoervenster ...........................................................................................................................67 7.9.2 Een berichtvenster.........................................................................................................................69 7.10 Opdrachten ...........................................................................................................................................72 8 Modules en procedures ..................................................................................................................................73 8.1 Modules ......................................................................................................................................................73 8.2 Procedures.................................................................................................................................................74 8.2.1 De subprocedure .............................................................................................................................74 8.2.2 De functieprocedure......................................................................................................................74 8.3 Een eenvoudig probleem automatiseren...........................................................................................75 8.3.1 Probleemanalyse ..............................................................................................................................75 8.3.2 Algoritme...........................................................................................................................................75 8.3.3 Programmacode invoeren ..............................................................................................................76 8.3.4 De code compileren en bewaren .................................................................................................76 8.3.5 Uitvoeren en testen .......................................................................................................................77 8.3.6 De code afdrukken .........................................................................................................................77 9 Subprocedures en functieprocedures.......................................................................................................78 9.1 Subprocedure...........................................................................................................................................78 9.1.1 Probleemanalyse ..............................................................................................................................78 9.1.2 Algoritme...........................................................................................................................................79 9.1.3 Programmacode schrijven.............................................................................................................79 9.1.4 De code compileren en testen......................................................................................................81 9.2 Functieprocedures ..................................................................................................................................82 9.2.1 Probleemanalyse ..............................................................................................................................82 9.2.2 Algoritme...........................................................................................................................................83 9.2.3 Programmacode schrijven.............................................................................................................83 9.2.4 Compileren en testen .....................................................................................................................84 9.2.5 De functie gebruiken .....................................................................................................................85 9.3 Een gebeurtenisprocedure ...................................................................................................................86
Informatica – Softwareontwikkeling
3
Anja Van Mello
Softwareontwikkeling
Inleiding tot VBA en het gebruik van de editor
9.3.1 Begrip gebeurtenis en gebeurtenisprocedure........................................................................86 9.3.2 Probleemanalyse ..............................................................................................................................88 9.3.3 Algoritme...........................................................................................................................................89 9.3.4 Implementatie..................................................................................................................................89 9.3.5 Testen ................................................................................................................................................90 9.4 Oefening – de berekening van de leeftijd ....................................................................................... 91 9.4.1 Probleemanalyse ...............................................................................................................................91 9.4.2 Algoritme............................................................................................................................................91 9.4.3 Opmerkingen.....................................................................................................................................92 9.4.4 Implementatie..................................................................................................................................93 9.4.5 Compileren en testen .....................................................................................................................94 9.5 Oefening – de berekening van de leeftijd via een formulier.....................................................97 9.6 Opdrachten .............................................................................................................................................103 10 Controlestructuren: sequentie en selectie ............................................................................................104 10.1 De opeenvolging of sequentie ............................................................................................................104 10.1.1 Kenmerken.......................................................................................................................................104 10.1.2 Structogram ...................................................................................................................................104 10.1.3 Opdrachten.....................................................................................................................................104 10.2 De keuze of selectie ........................................................................................................................105 10.2.1 De enkelvoudige/eenzijdige selectie ......................................................................................105 10.2.2 De dubbele of tweezijdige selectie ........................................................................................108 10.2.3 De meervoudige of meerzijdige selectie................................................................................112 10.3 Toepassingen....................................................................................................................................... 116 10.3.1 Een validatie op de invoer van een datum...............................................................................116 10.3.2 De validatie van de invoer van een bankrekeningnummer..................................................117 10.3.3 De notatie van een telefoonnummer ........................................................................................121 10.3.4 Een formulier voor personeelsbeheer ....................................................................................124 10.4 Opdrachten .........................................................................................................................................125 11 Controlestructuren: de herhaling of iteratie .......................................................................................127 11.1 De begrensde herhaling ......................................................................................................................127 11.1.1 Structogram ...................................................................................................................................127 11.1.2 Syntaxis...........................................................................................................................................127 11.1.3 Voorbeeld ........................................................................................................................................129 11.2 De voorwaardelijke herhaling met aanvangsvoorwaarde...........................................................132 11.2.1 Structogram ...................................................................................................................................132 11.2.2 Syntaxis...........................................................................................................................................132 11.2.3 Voorbeeld ........................................................................................................................................133 11.3 De voorwaardelijke herhaling met afbreekvoorwaarde ............................................................134 11.3.1 Structogram ...................................................................................................................................135 11.3.2 Syntaxis...........................................................................................................................................135 11.3.3 Voorbeeld ........................................................................................................................................135 11.4 Een vergelijking tussen deze twee types.......................................................................................136 11.4.1 Instructies herhalen zolang aan een voorwaarde is voldaan ...........................................136 11.4.2 Instructies herhalen totdat aan een voorwaarde is voldaan...........................................137 11.4.3 De lus verlaten...............................................................................................................................137 11.5 Oneindige lussen....................................................................................................................................139 11.5.1 Wanneer ontstaat een oneindige lus?.....................................................................................139 11.5.2 Hoe kun je een oneindige lus voorkomen? .............................................................................139 11.5.3 Hoe kun je een oneindige lus afbreken? ................................................................................139 11.6 Een vergelijking tussen de drie typen herhalingen.....................................................................140
Informatica – Softwareontwikkeling
4
Anja Van Mello
Softwareontwikkeling
Inleiding tot VBA en het gebruik van de editor
11.7 Toepassing: turven van resultaten in MS-Excel .......................................................................... 141 11.8 Opdrachten .............................................................................................................................................146 12 Geneste controlestructuren.......................................................................................................................147 13 Stapsgewijze verfijning...............................................................................................................................149 13.1 Verdeel en heers ...................................................................................................................................149 13.2 Het “Bubble-Sort”-algoritme ........................................................................................................149 13.2.1 Probleemanalyse ............................................................................................................................149 13.2.2 Stapsgewijze verfijning van het basisprobleem .................................................................150 13.2.3 Het hoofdprogramma....................................................................................................................151 13.2.4 De initialisatie van de array........................................................................................................151 13.2.5 Het eigenlijke sorteeralgoritme ...............................................................................................151 13.2.6 Het weergeven van het resultaat ............................................................................................152 13.3 Oproep van een procedure en de parameterbinding ..............................................................155 13.4 “Call by Value” versus “Call by Reference”................................................................................155 14 Recursie............................................................................................................................................................160 14.1 Iteratief versus recursief.................................................................................................................160 14.1.1 Een faculteitsfunctie...................................................................................................................160 14.1.2 De aandachtspunten......................................................................................................................161 14.2 Toepassingen.......................................................................................................................................162 14.2.1 De berekening van de grootst gemene deler........................................................................162 14.2.2 Het “Quicksort”-sorteeralgoritme..........................................................................................162 15 Werken met bestanden ...............................................................................................................................169 15.1 Inleiding ...................................................................................................................................................169 15.1.1 Probleemanalyse ............................................................................................................................169 15.1.2 Algoritme.........................................................................................................................................170 15.1.3 Implementatie.................................................................................................................................171 15.1.4 Afwerking........................................................................................................................................174 15.2 Het openen van een bestand..........................................................................................................176 15.2.1 De toegang tot een bestand ......................................................................................................176 15.2.2 Het “Open”-statement ................................................................................................................176 15.2.3 Opmerkingen...................................................................................................................................177 15.3 Het sluiten van een bestand ..........................................................................................................178 15.4 Het schrijven naar een bestand ...................................................................................................179 15.4.1 Het Write statement ..................................................................................................................179 15.4.2 Het “Print”-statement.................................................................................................................180 15.4.3 Het “Put”-statement ....................................................................................................................180 15.5 Het lezen vanuit een bestand........................................................................................................ 181 15.5.1 Het “Input”-statement.................................................................................................................181 15.5.2 De “Input”-functie........................................................................................................................182 15.5.3 Het “Line Input” statement.......................................................................................................183 15.5.4 Het “Get” statement....................................................................................................................184 16 Klassenmodules...............................................................................................................................................185 16.1 Waarom klassenmodules? ...................................................................................................................185 16.1.1 Klassen laten je toe om je eigen objecten aan te maken..................................................185 16.1.2 Het gebruik van klassen laat abstractie toe ........................................................................187 16.1.3 Klassenmodules vereenvoudigen het programmeerwerk...................................................187 16.2 Hoe werken klassenmodules?.........................................................................................................187 16.2.1 Klassenmodules zijn zoals bakvormen voor koekjes...........................................................188 16.2.2 Object instanties zijn de koekjes ...........................................................................................188 16.3 Een eenvoudig voorbeeld: een klasse voor tekstbestanden.................................................189
Informatica – Softwareontwikkeling
5
Anja Van Mello
Softwareontwikkeling
Inleiding tot VBA en het gebruik van de editor
16.3.1 Het aanmaken van een object klasse ......................................................................................189 16.3.2 Het aanmaken van een eigenschap aan de hand van een Public Variabele ...................189 16.3.3 Het aanmaken van een methode ...............................................................................................190 16.3.4 Gebruik maken van de object klasse.......................................................................................192 16.3.5 Wat is er gebeurd? ......................................................................................................................193 16.3.6 De gebeurtenissen “Initialize” en “Terminate” ...................................................................194 16.4 Het gebruik van “Property Statements”....................................................................................195 16.4.1 Wat zijn “Property Statements” en waarom zou je ze gebruiken?...............................195 16.4.2 Waarden ophalen met de eigenschap “Get” ..........................................................................195 16.4.3 Een waarde voor een eigenschap wijzigen met “Property Let”.......................................196 16.4.4 Een waarde voor een eigenschap wijzigen met “Property Set” ......................................197 17 Foutafhandeling..............................................................................................................................................199 17.1 De verschillende soorten fouten......................................................................................................199 17.1.1 Syntaxisfouten ..............................................................................................................................199 17.1.2 Logische fouten .............................................................................................................................199 17.1.3 Runtimefouten................................................................................................................................199 17.1.4 Voorbeeld van een runtimefout ............................................................................................... 200 17.2 Testen en debuggen van je toepassing...................................................................................... 200 17.2.1 Het onderbrekingspunt .............................................................................................................. 200 17.2.2 VBA-programmacode regel per regel uitvoeren................................................................. 204 17.3 Opvangen van “vreemde” foutmeldingen ................................................................................... 204 17.3.1 Foutafhandelingsroutine............................................................................................................ 205 17.3.2 On Error Resume Next .............................................................................................................. 207 17.3.3 Het type fout bepalen met het object “Err” ...................................................................... 208 17.3.4 De gebeurtenis “fout”................................................................................................................. 209
Informatica – Softwareontwikkeling
6
Anja Van Mello
Softwareontwikkeling
Inleiding tot VBA en het gebruik van de editor
2 Inleiding 2.1
Wat is Visual Basic for Applications? _______________________________
Microsoft® Visual Basic® for Applications (VBA) is een krachtige ontwikkeltechnologie voor het snel aanpassen en integreren van toepassingen met bestaande gegevens en systemen. VBA biedt een verfijnde set programmeerhulpmiddelen die zijn gebaseerd op het Microsoft Visual Basicontwikkelsysteem, het meest populaire snelle ontwikkelsysteem voor toepassingspakketten waarmee ontwikkelaars de kracht van toepassingspakketten kunnen inzetten. Met VBA kunnen klanten kant-en-klare software kopen en aanpassen aan hun specifieke bedrijfsprocessen, in plaats van deze van de grond af samen te stellen. Hiermee wordt tijd en geld bespaard, worden minder risico's genomen, worden de programmeervaardigheden gespreid en wordt precies geleverd wat de gebruiker nodig heeft. VBA biedt een volledig geïntegreerde ontwikkelomgeving (IDE) met dezelfde elementen waaraan de ontwikkelaars die Microsoft Visual Basic gebruiken, gewend zijn geraakt (inclusief een projectvenster, een eigenschappenvenster en foutopsporingsprogramma's). Visual Basic for Applications omvat tevens ondersteuning voor Microsoft Forms, waarmee aangepaste dialoogvensters en ActiveX®-besturingselementen kunnen worden gemaakt voor het snel samenstellen van gebruikersinterfaces. Indien VBA direct wordt geïntegreerd in een hosttoepassing, biedt het programma de voordelen van snelle prestaties binnen het verwerkingsproces (tot 200 keer sneller dan andere zelfstandige ontwikkelhulpprogramma's), naadloze integratie met de hosttoepassing (code achter documenten, cellen, enz.) en de mogelijkheid om oplossingen samen te stellen zonder extra hulpprogramma's te hoeven gebruiken. Softwareprogramma's die VBA gebruiken worden ook wel aanpasbare toepassingen genoemd. Dit zijn toepassingen die op maat kunnen worden gemaakt om aan bepaalde bedrijfsbehoeften te voldoen. Deze categorie van toepassingen stelt ontwikkelaars in staat om snel oplossingen samen te stellen waarvoor de eindgebruiker slechts weinig training nodig heeft. Voor MIS- en bedrijfsbeheerders betekent aanpasbaarheid dat oplossingen snel kunnen worden ontwikkeld en eenvoudig kunnen worden ingezet, met een minimum aan onderhoud. In een industrie die gewend is aan nieuwe toepassingen die twee jaar vertraagd zijn en hoge trainingskosten voor eindgebruikers, bieden deze oplossingen een enorm bedrijfsvoordeel op het gebied van investeringswinst en verminderde productietijd.
2.2
Geschiedenis van Visual Basic for Applications ______________________
Microsoft-oprichter en CEO Bill Gates heeft zijn visie voor aanpasbare toepassingen al meer dan 10 jaar geleden geformuleerd in zijn artikel in Byte Magazine “Beyond Macro Processing.” In dit artikel ziet hij de noodzaak voor een verfijnde en alom gedeelde omgeving als onderdeel van de productiviteitssoftware. Als ontwikkelhulpprogramma's direct in een toepassing worden geïntegreerd, kunnen ontwikkelaars hun kennis spreiden om toepassingspakketten “voorbij de macro-verwerking” te brengen en krachtige oplossingen samen te stellen op basis van de bestaande functionaliteit van toepassingen. VBA, de verwezenlijking van zijn visie, verscheen voor het eerst in Microsoft Excel in 1993. Snel
Informatica – Softwareontwikkeling
7
Anja Van Mello
Softwareontwikkeling
Inleiding tot VBA en het gebruik van de editor
daarna, ontving Microsoft verzoeken van honderden onafhankelijke softwareleveranciers (ISV's) voor een licentie om het programma in hun toepassingen te mogen gebruiken. Het verlenen van licenties voor het gebruik van VBA vormde in feite altijd al een onderdeel van de Microsoft-visie voor het programmeersysteem, maar met de release van versie 5.0 van Visual Basic for Applications in 1997, werd deze visie werkelijkheid. Niet alleen kenmerken de Microsoft Office 97-toepassingen zich nu door een volledig gedeelde ontwikkelomgeving, maar diezelfde omgeving is zodanig gestructureerd, dat deze als host kan worden bijgevoegd in elk product, inclusief externe toepassingen die door ISV's zijn ontwikkeld. In juni 1996 kondigde Microsoft aan dat het een licentie voor het gebruik van Visual Basic for Applications verleende aan een geautoriseerde organisatie — Summit Software Co. Summit Software hadden zeer veel ervaring bij het ondersteunen van bedrijven met het integreren van programmeeromgevingen in hun toepassingen. Sinds de start van het programma, zijn de reacties van de ISV-gemeenschap overweldigend positief geweest, met leveranciers in een groot aantal verticaal gestructureerde industrieën die een licentie voor het gebruik van Visual Basic for Applications voor hun producten hebben verkregen. In april 1999 konden ontwikkelaars kiezen uit meer dan 80 VBA-hosttoepasingen, waarmee aangepaste oplossingen en integratie in een groot aantal horizontaal en verticaal gestructureerde componenten binnen handbereik is gekomen
2.3
Welke plaats heeft VBA in de andere Microsoft-programma's? __________
Microsoft biedt een aantal ontwikkelhulpprogramma's die zijn gericht op de specifieke vaardigheden en behoeften van ontwikkelaars. Deze programma's omvatten de ontwikkelsystemen Microsoft Visual C++®, Visual J++® en Visual FoxPro®, Microsoft Office Developer en de Visual Basic-familie (het Visual Basic-programmeersysteem, Visual Basic for Applications en Visual Basic Scripting Edition). Hulpprogramma's zoals Visual C++, Visual J++, Visual FoxPro en het Visual Basic-programmeersysteem ondersteunen ontwikkelaars die hun oplossingen helemaal van de grond af opbouwen om te voldoen aan hoge marktspecifieke eisen. Microsoft Office Developer en Visual Basic for Applications ondersteunen de ontwikkelaars die ervoor kiezen om toepassingspakketten aan te schaffen en aan te passen, in plaats van deze van de grond af op te bouwen. Het aanschaffen en aanpassen van kant-en-klare software vermindert de ontwikkelkosten en -tijd van een oplossing in vergelijking met software die van de grond af moet worden opgebouwd. De Visual Basic-familie is ontwikkeld om krachtige programmeermogelijkheden te bieden die zijn gebaseerd op een eenvoudig te leren en eenvoudig te gebruiken programmeertaal. Elk lid van de Visual Basic-familie beschikt tevens over bepaalde gebruiksmogelijkheden. Visual Basic Scripting Edition is ontwikkeld om lichtgewicht scriptmogelijkheden te bieden voor omgevingen met weinig geheugen zoals webbrowsers, en wordt meestal gebruikt voor het maken van HTML-webpagina's. Het Visual Basic-programmeersysteem is het meest populaire en snelle ontwikkelprogramma voor toepassingen, waarmee zelfstandige softwareonderdelen kunnen worden gemaakt, inclusief uitvoerbare programma's, ActiveX-besturingselementen en COMonderdelen. Ten slotte maakt Visual Basic for Applications gebruik van dezelfde kracht die beschikbaar is in het Visual Basic-programmeersysteem en past deze toe op uiterst functionele toepassingen. U beschikt hierdoor over een oneindig aantal niveaus voor automatisering, aanpassing en integratie.
Informatica – Softwareontwikkeling
8
Anja Van Mello
Softwareontwikkeling
Inleiding tot VBA en het gebruik van de editor
3 Werkzaamheden automatiseren met macro’s Als je regelmatig met Word werkt, zul je merken dat bepaalde handelingen vaak uitgevoerd moeten worden. Voorbeelden hiervan zijn het invoegen van een bedrijfslogo boven een brief of het telkens opnieuw typen van standaardeinde van een brief. Deze tijdrovende handelingen kunnen geautomatiseerd worden met macro’s. Een macro kan omschreven worden als: een aantal routinehandelingen die door één commando telkens weer opnieuw uitgevoerd kunnen worden.
3.1
Het maken van een macro_________________________________________
Macro’s kun je op twee manieren maken: •
Je kunt de Macrorecorder starten en de handeling opnemen. Terwijl je de handeling uitvoert, maak je een opname van die procedure. Later speel je de opname weer af. Dit is de gemakkelijkste manier om een macro te maken.
•
Je kunt een macro-opdracht programmeren in Visual Basic for Applications (VBA). Het programmeren van een macro biedt meer mogelijkheden dan het gebruik van de macrorecorder, maar dit is dan ook werk voor specialisten.
In dit gedeelte leer je werken met de Macrorecorder. Je zult merken dat met behulp van deze methode een scala aan macro’s ontworpen kan worden. Als je een macro wil opnemen maak je gebruik van de menu-optie “Extra – Macro – Nieuwe macro opnemen”. Het volgende dialoogvenster verschijnt:
Omdat het maken van een macro een typisch praktijkonderdeel is, wordt dit dialoogvenster uitgebreid behandeld in de volgende oefening.
Informatica – Softwareontwikkeling
9
Anja Van Mello
Softwareontwikkeling
Inleiding tot VBA en het gebruik van de editor
Opdracht In deze macro maak je een standaardeinde voor een brief. 1.
Start Word.
2. Open een nieuw document. Let op: Iedere handeling die je uitvoert wordt opgenomen, dus ook het verplaatsen van de cursor of het wissen van een tekstgedeelte. Probeer foutloos te werken. 3. Klik op het menu Extra en kies voor de optie Macro, Nieuwe macro opnemen. 4. Typ in het tekstvak Macronaam de naam van de Macro. In dit geval is dat "Einde". 5. De naam moet met een letter beginnen en mag verder alleen uit letters en cijfers bestaan. Je mag geen spaties gebruiken. In het invulvak Macro's opslaan in kun je opgeven of je de macro die je opneemt alleen in het betreffende document of in het sjabloon Normal.dot (het standaard sjabloon) wil gebruiken. Als je kiest voor opslaan in Normal.dot dan is de macro beschikbaar in alle documenten die na de macro-opname gemaakt worden. Verder kun je een toelichting van de macro in het tekstvak Beschrijving typen. Dit is niet noodzakelijk maar wel handig. 6. Verander de tekst in het tekstvak Beschrijving in: "Einde van een brief" en druk op OK. 7. Je hebt nu de macrorecorder gestart. De muisaanwijzer heeft de vorm van een cassettebandje. In de statusbalk zie je de afkorting OPN (Opname). Dit geeft aan dat de macro-recorder actief is. Opmerking: Tijdens het opnemen van een macro kun je geen muisbewegingen uitvoeren in het document. Je kunt nog wel gebruik maken van de afrolmenu's en dialoogvensters. Als je tekst wil selecteren, moeten de juiste toetsen gebruikt worden. Druk op en verplaats de cursor met de pijltjestoetsen over het beeldscherm. Druk op Esc om te stoppen met selecteren. 8. Op het beeldscherm verschijnt de werkbalk Macro Opnemen. Op deze werkbalk bevinden zich de knoppen Stoppen en Opname onderbreken. Door op Stoppen te drukken beëindig je de opname. Door op Opname onderbreken te drukken kun je een aantal handelingen uitvoeren die je niet in de macro wilt opnemen. 9. Typ de volgende tekst in de juiste vorm over. Met vriendelijke groeten H. Verbeek Sales Manager IntelliSoft
Informatica – Softwareontwikkeling
10
Anja Van Mello
Softwareontwikkeling
Inleiding tot VBA en het gebruik van de editor
10. Als je de tekst getypt hebt kun stop je de opname door op de knop Opname stoppen te klikken. Je kunt ook kiezen “Extra - Macro - Opname stoppen”. 11. Je gaat de macro “Einde” nu uitvoeren. Klik Extra, Macro, Macro's. Klik op de macro "Einde". De macro is nu geslecteerd. Klik op de knop Uitvoeren. Als het goed is zal de tekst Met vriendelijke groeten, tot en met IntelliSoft op de plaats waar de cursor staat ingevoegd worden. Mochten er fouten in de macro zitten, neem de macro dan opnieuw op. Dit is op dit moment handiger dan correcties in de VBA-commando's aan te brengen. Opmerking: Nadat je de opname gestopt hebt, moet het document op het beeldscherm opgeslagen te worden. De macro wordt automatisch opgeslagen in het sjabloon Normal.dot
3.2
Een macro bewerken ____________________________________________
Je kunt de macro “Einde” wijzigen. Daartoe kies je Extra - Marco - Macro’s. Het volgende venster verschijnt:
Klik met de linkermuisknop op de macro die je wil wijzigen. Klik vervolgens op de knop Bewerken. Het volgende venster verschijnt:
Informatica – Softwareontwikkeling
11
Anja Van Mello
Softwareontwikkeling
Inleiding tot VBA en het gebruik van de editor
In het rechter gedeelte van het venster bevindt zich de tekst en de macro-opdrachten van de macro “Einde”. Als je de tekst van de macro wil wijzigen ga dan als volgt te werk: Plaats de cursor voor de tekst die je wil gaan vervangen. In dit geval voor “Met vriendelijke groeten”. Selecteer de tekst die je gaat vervangen; dit doe je op dezelfde manier zoals je dat in Word doet. Druk vervolgens op de Delete-toets. Typ de volgende tekst in:“Met hartelijke groet”. Let op: je moet de nieuwe tekst tussen dubbele aanhalingstekens te plaatsen ( “ ). Als je dat niet doet, zal de macro niet werken. Als je de wijziging hebt aangebracht, kies je in het venster Microsoft Visual Basic voor Bestand en vervolgens voor de optie Sluiten en terugkeren naar Microsoft Word. Kies voor Extra - Macro’s en start de macro “Einde”. Als alles goed is, zal de macro uitgevoerd worden, maar de tekst luidt nu: “met hartelijke groet” in plaats van “met vriendelijke groeten”. Je kunt macro’s opnemen om bepaalde handelingen te automatiseren. In het voorafgaande heb je een macro opgenomen die tekst in een nieuw document plaatst. Je kunt echter ook macro’s opnemen die bepaalde handelingen automatiseren die je in Word uitvoert. De macro die je in opdracht 2 gaat opnemen, opent bijvoorbeeld een sjabloon.
Informatica – Softwareontwikkeling
12
Anja Van Mello
Softwareontwikkeling
Inleiding tot VBA en het gebruik van de editor
Opdracht 1. Open een nieuw document. 2. Open het afrolmenu Extra en kies voor de optie Macro – Nieuwe macro opnemen. In het dialoogvenster dat verschijnt typ je de naam van de Macro in. In dit geval is dat “FAXEN”. 3. Verder kun je een toelichting van de macro in het tekstvak Beschrijving typen. 4. Verander de tekst in het tekstvak Beschrijving in: “Openen van het Fax-sjabloon”. 5. Je hebt nu de macrorecorder gestart. De muisaanwijzer heeft de vorm van een cassettebandje. In de statusbalk zie je dat de afkorting OPN (van opnemen) actief is. 6. Kies vervolgens voor Bestand - Nieuw en klik op het tabblad Brieven en faxen . Kies voor het sjabloon Eigentijdse fax.dot (of een sjabloon naar keuze) en klik op OK. Het faxblad verschijnt op het beeldscherm. De macro is af. 7. Als de macro af is, stop je de opname. Druk op de knop Opname stoppen of kies voor Extra - Macro - Opname stoppen. 8. Kies voor Bestand - Sluiten en sla de wijzigingen niet op. 9. open een nieuw document en start de macro FAXEN. als het goed is zal het sjabloon Eigentijdse fax.dot geopend worden. Mocht dat niet het geval zijn, neem de macro dan opnieuw op.
3.3
Verwijderen van een macro________________________________________
Als je gedurende de opname van een macro veel fouten hebt gemaakt en de macro niet optimaal werkt, dan zul je de macro willen verwijderen. Als je een macro wil verwijderen, dan klik je op : Extra - Macro’s. Het venster Macro’s verschijnt.Vervolgens selecteer je de macro die je wil verwijderen. De geselecteerde macro licht blauw op. Klik op de knop Verwijderen. Er verschijnt een waarschuwingsvenster dat vraagt of je de macro die je geselecteerd hebt echt wil verwijderen. Klik op Ja als je de macro wil verwijderen. LET OP: macro’s worden definitief verwijderd. Je kunt de verwijderde macro niet via de prullenbak terugzetten.
Opdracht 1. Verwijder de macro “Einde”. 2. Verwijder de macro “FAXEN”.
Informatica – Softwareontwikkeling
13
Anja Van Mello
Softwareontwikkeling
3.4
Inleiding tot VBA en het gebruik van de editor
Gebruik van een macro ___________________________________________
Je maakt natuurlijk een macro aan om deze vervolgens te gaan gebruiken. Je kunt dit op vier wijzen doen: De macro opstarten vanuit het macro-dialoogvenster; De macro toewijzen aan een sneltoets; De macro toewijzen aan een extra knop van één van de werkbalken; Het MS-Word document opstarten met een macro,
3.4.1 De macro opstarten vanuit het macro-dialoogvenster Via de menu-optie “Extra – Macro – Macro’s” verschijnt het volgende dialoogvenster:
Hierin kan men een macro selecteren en deze laten uitvoeren. Aangezien de macro allicht wordt aangemaakt om sneller te kunnen werken is dit een vrij omslachtige manier van werken.
3.4.2 De macro toewijzen aan een sneltoets Op het moment van de definitie van een macro kun je kiezen om deze toe wijzen aan de werkbalken of aan het toetsenbord. In dit laatste geval krijg je de mogelijkheid om er een sneltoets aan te koppelen. Aangezien deze toetsen (zoals de naam het wel doet vermoeden) bedoeld zijn om het typwerk te versnellen, ligt dan de macro veel sneller binnen handbereik. In het dialoogvenster voor de opname van een macro dien je dus te kiezen voor een toewijzing aan het toetsenbord.
Informatica – Softwareontwikkeling
14
Anja Van Mello
Softwareontwikkeling
Inleiding tot VBA en het gebruik van de editor
Wanneer je dit doet, dan opent er zich een tweede dialoogvenster. Op dit venster kan je de gewenste toetscombinatie invoeren. Het systeem waakt er ook over om je te waarschuwen wanneer je een toetscombinatie zou willen gaan gebruiken die reeds in gebruik is. Dit wordt op het venster aangegeven vlak onder het invoervak voor de toetscombinatie.
3.4.3 De macro toewijzen aan een extra knop van één van de werkbalken Een andere manier om de functie snel ter beschikking te stellen is door deze op één van de bestaande of zelfs op een nieuwe werkbalk te plaatsen. Dit zal later zeer handig zijn wanneer we zien hoe we eigengemaakte formulieren kunnen opstarten, bijvoorbeeld binnen de MS-Word omgeving. Maak een macro (“TabelHoofding”) aan die een geselecteerde rij van een tabel een arcering van 10% geeft en tevens het lettertype op vet zet. We gaan nu de werkbalken aanpassen via de menu-optie “Beeld systeem opent een dialoogvenster met drie tabbladen:
Informatica – Softwareontwikkeling
15
Werkbalken
Aanpassen”. Het
Anja Van Mello
Softwareontwikkeling
Inleiding tot VBA en het gebruik van de editor
Op het eerste tabblad vinden we alle werkbalken en vinden we tevens de mogelijkheid om een nieuwe werkbalk aan te maken. Op het tweede tabblad toont het systeem alle beschikbare opdrachten. Hiermee kunnen we de bestaande werkbalken uitbreiden. In de categorie “Macro’s” vinden we echter ook al de eigengemaakte macro’s terug. Deze kunnen we nu slepen naar de werkbalk waar we er gebruik van willen maken.
Wanneer we op die wijze een macro op een werkbalk plaatsen, dan zien we in eerste instantie het standaard icoontje en de vrij lange omschrijving. Dit kan evenwel worden aangepast naar de eigen smaak. Dit laatste kan gebeuren door (wanneer het venster “Aanpassen” nog steeds actief staat) rechts te klikken op de betreffende optie en gebruik te maken van de verschillende opties in het extra menu.
Informatica – Softwareontwikkeling
16
Anja Van Mello
Softwareontwikkeling
Inleiding tot VBA en het gebruik van de editor
Een greep uit de beschikbare opties: Optie Naam Knopvlak
Omschrijving Biedt de mogelijkheid om de naam van de functie aan te passen Het knopvlak zelf is natuurlijk belangrijk wanneer je langs deze weg de functie ter beschikking stelt. Vandaar dat je verschillende opties ter beschikking hebt: Knopvlak kopiëren Knopvlak plakken Beginwaarden knopvlak Knopvlak bewerken Knopvlak wijzigen
Stijl Groep beginnen
Een bestaand knopvlak kopiëren naar het klembord Een knopvlak vanop het klembord kopiëren naar de functie Terugkeren naar de standaardwaarde Opent een editor specifiek voor deze knopvlakken Opent een paneel met mogelijke knopvlakken waaruit je kan kiezen
Je kunt zelf de stijl bepalen waarin de functie ter beschikking staat, bijvoorbeeld met of zonder tekst Biedt de mogelijkheid om een verticale scheidingslijn aan te brengen
Informatica – Softwareontwikkeling
17
Anja Van Mello
Softwareontwikkeling
Inleiding tot VBA en het gebruik van de editor
3.4.4 Het MS-Word document opstarten met een macro In sommige gevallen wil je MS-Word slechts gebruiken voor één welbepaalde taak. De algemene waaier van functies van MS-Word hoeven dan niet ter beschikking te staan. Je wil applicatie laten opstarten, de taak afhandelen en vervolgens de zaak weer sluiten. We gaan dit illustreren aan de hand van een gekend voorbeeld, namelijk het maken van een mailing met behulp van MS-Word. Maak een mailing-document aan voor het jaarlijkse jobevent van het software bedrijf IntelliSoft. De adresgegevens van de bestemmelingen heeft het bedrijf beschikbaar in een MS-Excel document “adressen.xls” met de volgende structuur: Titel
Initiaal
naam
adres
postcode
woonplaats
Dhr. Dhr.
B P
Bibber Pienter
Kouterbaan 12 Elsenlaan 96
8800 9000
Roeselare Gent
Maak een macro “Mailing” aan binnen dit document die de eigenlijke stappen voor het samenvoegen van het basisdocument met de adresgegevens uit het Excel-bestand automatiseert. We gaan er nu voor zorgen dat het aanmaken van de mailing nog enkel een (dubbel)klik vergt. Deze acties moet je coördineren vanaf het startpunt naar MS-Word, namelijk de snelkoppeling. Maak een snelkoppeling naar MS-Word en plaats deze op het bureaublad, Klik met de rechtermuisknop op het pictogram van de snelkoppeling naar Microsoft Word, vervolgens op Eigenschappen en ten slotte op het tabblad Snelkoppeling. In het vak Bestemming of het vak Opdrachtregel vind je het pad naar MS-Word terug. Aan het einde van het pad typ je een schakeloptie voor het opstarten. Voor de schakeloptie heb je de keuze uit de volgende opties: Schakeloptie /a
Bewerking Hiermee start je Word en voorkom je dat invoegtoepassingen en algemene sjablonen (inclusief de sjabloon Normal.dot) automatisch worden geladen. Met de schakeloptie /a worden de instellingenbestanden ook vergrendeld. Dit houdt in dat deze bestanden niet kunnen worden gelezen of gewijzigd als je de schakeloptie /a gebruikt. /lpad van invoegtoepassing Hiermee start je Word en wordt een specifieke Wordinvoegtoepassing geladen. /m Hiermee start je Word en wordt er geen AutoExec-macro uitgevoerd. /mmacronaam Hiermee start je Word en voer je een specifieke macro uit. Deze parameter zorgt er ook voor dat er geen AutoExec-macro's in Word worden uitgevoerd. /n Hiermee start je Word zonder dat je een document opent.
Informatica – Softwareontwikkeling
18
Anja Van Mello
Softwareontwikkeling
/tsjabloonnaam /w
(geen schakeloptie)
Inleiding tot VBA en het gebruik van de editor Documenten die in andere sessie van Word zijn geopend, worden niet weergegeven in het Windows-menu met andere sessies. Hiermee start je Word met een nieuw document dat is gebaseerd op een ander sjabloon dan het sjabloon Normal. Hiermee start je Word met een leeg document. Documenten die in andere sessie van Word zijn geopend, worden niet weergegeven in het Windows-menu met andere sessies. Hiermee opent je een leeg document in een nieuw Word-venster (in de huidige sessie van Word).
We zullen gebruik maken van de schakeloptie “/mMailing” om automatisch de mailing-operatie te starten. Opmerking Als je macro's die automatisch worden uitgevoerd, wilt onderdrukken zonder een parameter te gebruiken, hou je SHIFT ingedrukt terwijl je Word start. Als je Word start vanaf de Office-werkbalk, klik je eerst op de knop van het programma in de Office-werkbalk en vervolgens druk je meteen op SHIFT en hou je deze toets ingedrukt terwijl Word wordt gestart.
In de vorige paragraaf werd reeds een “speciale” macro vermeld, namelijk de “Autoexec” macro. Wat is dit en zijn er nog dergelijke macro’s? Door een macro een bepaalde naam te geven, kun je de macro automatisch laten uitvoeren tijdens een bewerking, zoals tijdens het starten van Word of het openen van een document. MS-Word herkent de volgende macronamen als automatische macro's: Macronaam AutoExec AutoNew AutoOpen AutoClose AutoExit
Wanneer de macro wordt uitgevoerd Tijdens het starten van Word of het laden van een algemene sjabloon Telkens wanneer je een nieuw document maakt Telkens wanneer je een bestaand document opent Telkens wanneer je een document sluit Als je Word afsluit of een algemene sjabloon uit het geheugen verwijdert
Net als andere macro's kunnen automatische macro's worden opgeslagen in de sjabloon Normal, een andere sjabloon of in een document. Als je een automatische macro wilt uitvoeren, moet deze zich bevinden in de sjabloon Normal, in het actieve document of in de sjabloon waarop het actieve document is gebaseerd. De enige uitzondering is de macro AutoExec, die alleen automatisch wordt uitgevoerd als deze is opgeslagen in de sjabloon Normal, in een sjabloon die algemeen wordt geladen door middel van het dialoogvenster Sjablonen en invoegtoepassingen of in een algemene sjabloon in de opstartmap. In geval van een naamconflict (meerdere automatische macro's met dezelfde naam), wordt de macro uitgevoerd in de meest nabije context. Als u bijvoorbeeld de macro AutoClose maakt in een document en in de daaraan gekoppelde sjabloon, wordt alleen de macro AutoClose uitgevoerd die u in het document hebt opgeslagen. Als je de macro AutoNew maakt in de sjabloon Normal, wordt de macro in dat sjabloon alleen uitgevoerd als er geen macro met de naam AutoNew is opgeslagen in het document of in de daaraan gekoppelde sjabloon.
Informatica – Softwareontwikkeling
19
Anja Van Mello
Softwareontwikkeling
3.6
Inleiding tot VBA en het gebruik van de editor
Invoer van gegevens door middel van macro's _______________________
Het invoeren van gegevens in standaarddocumenten zoals een fax, memo, offerte of een standaardbrief kan geautomatiseerd worden door middel van de macro instructie Inputbox. Deze opdracht zorgt ervoor dat na het opvragen van de macro een dialoogvenster verschijnt dat om de invoer van gegevens vraagt. Na het intypen en bevestigen van dit scherm gaat de macro verder met het uitvoeren van de opdrachten en worden de ingevoerde gegevens op de juiste plaats in het document geplaatst. Voordat je de macro instructie Inputbox kunt gebruiken, zul je eerst een sjabloon moeten maken dat de juiste tekst en opmaakfuncties bevat. Daarna zul je met behulp van Bladwijzers de plaats moeten aangeven waar uiteindelijk de gegevens geplaatst moeten worden.
3.6.1 Het maken van een Bladwijzer Zet de cursor op de positie waar je een Bladwijzer wil instellen. Kies voor “Invoegen – Bladwijzer”. Het volgende venster verschijnt:
Typ in het vak Bladwijzernaam de naam van de bladwijzer. Probeer in dit geval een naam te kiezen die correspondeert met de gegevens die je later in gaat voeren. Bijvoorbeeld: Naam. Klik op de knop “Toevoegen”. Deze bladwijzer heet Naam en als je later aangeeft dat je naar de Bladwijzer Naam wil gaan weet Word precies welke positie bedoeld wordt. Je kunt bladwijzers aan tussenkopjes en hoofdstuktitels toevoegen. Bij het werken met omvangrijke documenten is het gebruik van bladwijzers erg handig.
Informatica – Softwareontwikkeling
20
Anja Van Mello
Softwareontwikkeling
Inleiding tot VBA en het gebruik van de editor
3.6.2 Het plaatsen van een Bladwijzer Plaats de cursor op de plaats waar je de bladwijzer gaat plaatsen. Kies voor “InvoegenBladwijzer”. Selecteer de Bladwijzer met één klik op de linkermuisknop. Klik vervolgens op de knop “Toevoegen”. Als je naar een specifieke bladwijzer wilt gaan dan kies je voor “Invoegen – Bladwijzer”. Selecteer de betreffende bladwijzer en klik op “Ga naar”.
3.6.3 Verwijderen van een Bladwijzer Het verwijderen van een Bladwijzer kun je doen door te kiezen voor de stappen InvoegenBladwijzer - Bladwijzer selecteren en op de knop Verwijderen te klikken.
3.6.4 Een document opslaan als sjabloon Word maakt gebruik van sjablonen. Het standaard sjabloon is Normal.dot. Dit bestand bevat alle standaard kenmerken die in een MS-Worddocument zitten, zoals bijvoorbeeld lettertype, marges en regelafstand. Als je regelmatig een document met dezelfde opmaak gebruikt, kun je dat document opslaan als sjabloon. Op die manier voorkom je dat het origineel per ongeluk gewijzigd wordt. Als je Word de opdracht geeft een document op basis van een sjabloon te openen dan worden de kenmerken uit het sjabloon gekopieerd en in het nieuwe document geplaatst. Op deze manier hebben je documenten en consistente opmaak. Als je een document als sjabloon wil opslaan, ga dan als volgt te werk: Zorg dat het document op het scherm staat. Kies Bestand, Opslaan als… Het venster Opslaan als…verschijnt. Standaard opent Word het venster Opslaan als… met de optie bestand opslaan als worddocument. Het bestand krijgt de extensie .DOC en wordt in de map Mijn documenten geplaatst. Typ in het tekstvak Bestandsnaam de naam van het sjabloon, in dit geval: MEMO1. Een sjabloon heeft als extensie .DOT. Je hoeft deze extensie niet achter de naam te typen. Je kunt op het pijltje naar beneden klikken rechtsachter het tekstvak Opslaan als. Vervolgens verschijnen verschillende formaten waarin je documenten kunt opslaan. Kies voor het formaat Documentsjabloon *.DOT. De weergave van het venster verandert. Word merkt op dat een document in .DOT formaat wordt opgeslagen. De sjablonen staan in aparte mappen. Word opent de mappen waar de sjablonen opgeslagen worden.
Informatica – Softwareontwikkeling
21
Anja Van Mello
Softwareontwikkeling
Inleiding tot VBA en het gebruik van de editor
Klik op de knop Opslaan. Als de standaardinstellingen van Word gehanteerd worden dan wordt dan wordt het sjabloon MEMO1.DOT opgeslagen in de map C:\Program files\Microsoft office\Sjablonen. Het kan zijn dat andere instellingen opgegeven zijn en dat de sjablonen op en andere locatie zijn opgeslagen. Word weet echter altijd de locatie van de sjablonen te vinden. Klik op de knop opslaan en sluit het document af. Klik op Bestand, nieuw. Als alles goed is zul je het sjabloon MEMO1 in de lijst sjablonen op het tabblad Algemeen terugvinden. Dubbelklik op het icoontje en het sjabloon MEMO1 wordt geopend.
Opdracht 1: eenvoudig faxen In de volgende opdracht maak je een macro die een sjabloon voor een fax opvraagt en vervolgens naar de bladwijzers Naam, Faxnummer en Betreft springt. 1. Maak een sjabloon dat er als volgt uitziet. Gebruik de tabelfunctie en kies voor 2 kolommen en 5 rijen. Typ de tekst en stel 3 bladwijzers in. De tekst in de tweede kolom typ je niet in de tabel, maar in het venster Bladwijzer. Fax Naam: Faxnummer: Betreft:
Naam Faxnummer Betreft
2. Bewaar het document als sjabloon onder de naam TESTFAX.DOT. 3. Maak het scherm leeg en open een nieuw documentvenster. 4. Maak een macro die het sjabloon TESTFAX opvraagt. Bewaar de macro onder de naam TESTFAX. 5. Als de macrorecorder loopt, kies je voor Bewerken - Bladwijzer en selecteer de Bladwijzer Naam en klik op Ga naar. Doe hetzelfde met de bladwijzers Faxnummer en Betreft. 6. Klik op de knop Sluiten. Het venster Bladwijzer wordt gesloten. 7. Sluit de macro-recorder af.
Informatica – Softwareontwikkeling
22
Anja Van Mello
Softwareontwikkeling
Inleiding tot VBA en het gebruik van de editor
Maak een macro “ErgonomischBlauw” waarmee je de MS-Word omgeving in een mode zet met witte letters op een blauwe achtergrond. Dit kun je door in het menu-item “Extra Opties” op het tabblad “Algemeen” de optie “Blauwe achtergrond, witte letters” aan te vinken. Voeg een knop toe aan je werkbalk waarmee je deze macro oproept en kies voor de standaard weergave met
als pictogram
Zoek vervolgens de macro op tussen je andere macro’s en kies voor bewerken. Je bekomt de volgende code: Sub ErgonomischBlauw() ' ' ErgonomischBlauw Macro ' Macro opgenomen op 26/06/2001 door Anja Van Mello ' With Options .Pagination = True .WPHelp = False .WPDocNavKeys = False .ShortMenuNames = False .RTFInClipboard = True .BlueScreen = True .EnableSound = True .ConfirmConversions = False .UpdateLinksAtOpen = True .SendMailAttach = True .MeasurementUnit = wdCentimeters .AllowPixelUnits = False .AnimateScreenMovements = True .VirusProtection = False .ApplyFarEastFontsToAscii = False .InterpretHighAnsi = wdHighAnsiIsHighAnsi End With Application.DisplayRecentFiles = True RecentFiles.Maximum = 4 End Sub
Dit is een hele mondvol voor een beperkte actie. We zullen later zien hoe we dit kunnen vereenvoudigen.
Informatica – Softwareontwikkeling
23
Anja Van Mello
Softwareontwikkeling
Inleiding tot VBA en het gebruik van de editor
Opdracht 2: eenvoudig aanmaningen versturen Maak een mailing-document “aanmaning” aan voor de maandelijkse job van de aanmaningen. De adresgegevens van de bestemmelingen en het saldo van hun openstaande facturen heeft het bedrijf beschikbaar in een MS-Excel document “saldo.xls” met de volgende structuur: Aanspr
Naam
Adres
Postnr Plaats
De heer
Pieter Bruylandt
Acacialaan 73
1840
MALDEREN
Saldo
Mevrouw
Anna De Braeckeleer
Bollandistenstraat 45
1840
LONDERZEEL
9 500 BEF
De heer
Mark Budens
Boskapellaan 69
1850
GRIMBERGEN
5 250 BEF
De heer
Mark Bauduin
Stationsstraat 5
1851
HUMBEEK
12 350 BEF
Mevrouw
Lieve De Smedt
Brusselstraat 285
1861
WOLVERTEM
45 500 BEF
12 450 BEF
De heer
Manu De Witte
Cellebroersstraat 16
1861
MEISE
12 900 BEF
De heer
Antoine Kowalczyk
Ch. Gillisquetlaan 34
1880
KAPELLE-OP-DEN-BOS
42 500 BEF
Mevrouw
Carla Van Laecke
E. Smitsstraat 33
1910
NEDEROKKERZEEL
63 200 BEF
Mevrouw
Rozemie Van Cauberghe
Forumlaan 4
1930
ZAVENTEM
42 500 BEF
Maak een macro “Aanmaning” aan binnen dit document die de eigenlijke stappen voor het samenvoegen van het basisdocument met de adresgegevens uit het Excel-bestand automatiseert. Maak een snelkoppeling aan op het bureaublad die de taak voor de gebruiker opstart. Een mogelijk resultaat ziet er als volgt uit:
Informatica – Softwareontwikkeling
24
Anja Van Mello
Softwareontwikkeling
Inleiding tot VBA en het gebruik van de editor
4 Macro’s bewerken met Visual Basic for Applications (VBA) Zoals we nu gezien hebben is een macro is een middel om taken te automatiseren. Een reeks taken die je normaliter zelf één na één moet uitvoeren, worden nu uitgevoerd na een eenvoudige klik op een knop. Intern houdt het systeem de inhoud van deze macro’s bij in een programmeertaal, namelijk Visual Basic for Applications (VBA). VBA is de gemeenschappelijke programmeertaal van alle MS-Office programma’s. Ook verschillende programma’s buiten de Office-suite maken gebruik van deze programmeertaal. Je kunt macro’s met behulp van VBA bewerken en op die manier extra functionaliteit aan Word toevoegen. Je maakt daarbij gebruik van de Microsoft Visual Basic editor. Kies voor Extra Macro - Macro’s en selecteer de macro TESTFAX - klik op Bewerken. Op het scherm verschijnt het volgende venster:
De mogelijkheid bestaat dat aan de linkerkant van het venster venstertjes geopend zijn (Project-Normal en Eigenschappen-New Macros). Je kunt deze vensters sluiten door op het Xteken op de titelbalk te klikken. In een volgend hoofdstuk zullen we dieper ingaan op het gebruik en de werking van de VBAeditor. De opdrachten kun je maken door de instructies en de VBA-commando’s in te typen. Het kan zijn dat tijdens het intypen van bepaalde commando’s help-instructies en commando-boxen verschijnen. Je kunt deze instructies in eerste instantie negeren en gewoon typen.
Informatica – Softwareontwikkeling
25
Anja Van Mello
Softwareontwikkeling
Inleiding tot VBA en het gebruik van de editor
De tekst in het werkveld luidt als volgt: Sub Testfax() ' ' Testfax Macro ' Macro opgenomen op 07-05-2001 door Anja Van Mello ' Documents.Add Template:= _ "C:\Windows\Application Data\Microsoft\Sjablonen\Anja\TESTFAX.dot", _ NewTemplate:=False, DocumentType:=0 Selection.GoTo what:=wdGoToBookmark, Name:="naam" Selection.GoTo what:=wdGoToBookmark, Name:="faxnummer" Selection.GoTo what:=wdGoToBookmark, Name:="betreft" With ActiveDocument.Bookmarks .DefaultSorting = wdSortByName .ShowHidden = False End With End Sub
De naam van de persoon die de macro heeft opgenomen zal uiteraard afwijken. Je ziet dat deze tekst op het scherm groen wordt weergegeven. Dit houdt in dat deze tekst bedoeld is als helptekst. Je kunt helptekst toevoegen zodat je later gemakkelijk kunt nagaan wat de verschillende VBA-commando’s voor effect hebben. BELANGRIJK: Als je groene helptekst in de macro wilt plaatsen dan typ je altijd eerst een enkel aanhalingsteken ( ‘ ) om aan te geven dat het hier niet om een commando, maar om helptekst. Typ vervolgens de tekst. Als je buiten de helptekst klikt, zal deze groen worden weergegeven. Helptekst heeft geen invloed op het uitvoeren van de macro. Het gebruik van de opdracht Inputbox zorgt ervoor dat Word op een bepaalde positie (een Bladwijzer) vraagt om de invoer van gegevens. Het toevoegen van deze opdracht vindt plaats als je de macro gaat bewerken. Je zult dus eerst een macro moeten maken die voor de openen van het sjabloon en het gebruik van de bladwijzers zorgt. Als je deze macro gemaakt hebt, ga je hem vervolgens bewerken en voeg je de opdracht Inputbox toe. Eerst zul je moeten opgeven dat er variabelen (verschillende gegevens) moeten worden ingevoerd. Daartoe gebruik je de opdracht: Dim invoer
Je plaatst deze opdracht boven de eerste mededeling van de tekst, namelijk Documents.Add Template. Vervolgens geef je op dat er een inputbox (invulvenster) moet verschijnen waarin je de verschillende gegevens kunt intypen waarna deze in het document op de juiste plaats worden gezet. Plaats de cursor boven de zin: Selection.Goto What:=wdGotoBookmark, Name:=”Naam”
Druk op Enter en typ de volgende opdracht: invoer=Inputbox ("Klik hier en typ de naam!", "IntelliSoft", "Typ de naam!")
Informatica – Softwareontwikkeling
26
Anja Van Mello
Softwareontwikkeling
Inleiding tot VBA en het gebruik van de editor
De opdracht zorgt dat er een dialoogvenster verschijnt dat om het intypen van de naam vraagt. De titelbalk van dit dialoogvenster bevat de tekst IntelliSoft en in het tekstvak staat de default (= standaard) mededeling Klik hier en typ uw naam! (Zie afbeelding).
Na het intypen van de informatie moet in dit geval de naam nog in het document geplaatst worden. Plaats de opdracht: Selection.TypeText Text:=Invoer onder de opdracht: Selection.GoTo What:=wdGoToBookmark, Name:="Naam"
De tekst in het werkveld van de VBA-editor ziet er als volgt uit: Sub Testfax() ' ' Testfax Macro ' Macro opgenomen op 07-05-2001 door Anja Van Mello ' Dim invoer Documents.Add Template:= _ "C:\Program Files\Microsoft Office\Templates\Anja\TESTFAX.dot", _NewTemplate:=False, DocumentType:=0 Selection.GoTo what:=wdGoToBookmark, Name:="naam" invoer = InputBox("Klik hier en typ de naam!", "IntelliSoft", "Typ de naam!") Selection.TypeText Text:=invoer Selection.GoTo what:=wdGoToBookmark, Name:="faxnummer" Selection.GoTo what:=wdGoToBookmark, Name:="betreft" With ActiveDocument.Bookmarks .DefaultSorting = wdSortByName .ShowHidden = False End With End Sub
Mocht dat niet het geval zijn dan zul je de tekst zo moeten aanpassen dat de tekst op het beeldscherm overeenkomt met de bovenstaande tekst. Je kunt de bovenstaande tekst ook kopiëren en in de VBA-editor plakken. Je hebt nu de Inputbox Naam opgegeven. De inputboxen Faxnummer en Betreft kun je op precies dezelfde wijze opgeven. Het is beslist noodzakelijk de opdracht Invoer = Inputbox en de opdracht Selection.TypeText te herhalen voor iedere inputbox. Tip: je kunt gebruikmaken van de mogelijkheid tekst te kopiëren en te plakken. Dat bespaart een hoop typwerk. Vergeet echter niet de juiste bladwijzer in te typen bij de opdracht Invoer = Inputbox. Het oogt niet echt professioneel als in de inputbox voor het Faxnummer naar de naam gevraagd wordt.
Informatica – Softwareontwikkeling
27
Anja Van Mello
Softwareontwikkeling
Inleiding tot VBA en het gebruik van de editor
Na het toevoegen van de verschillende instructies ziet de volledige macro er als volgt uit: Sub Testfax() ' ' Testfax Macro Dim invoer Documents.Add Template:= _ "C:\Program Files\Microsoft Office\Templates\Anja\TESTFAX.dot, _ NewTemplate:=False, DocumentType:=0 Selection.GoTo what:=wdGoToBookmark, Name:="naam" invoer = InputBox("Klik hier en typ de naam!", "HCCNet", "Typ de naam!") Selection.TypeText Text:=invoer Selection.GoTo what:=wdGoToBookmark, Name:="faxnummer" invoer = InputBox("Klik hier en typ het faxnummer!", "HCCNet", "Typ het faxnummer!") Selection.TypeText Text:=invoer Selection.GoTo what:=wdGoToBookmark, Name:="betreft" invoer = InputBox("Klik hier en typ het onderwerp!", "HCCNet", "Typ het onderwerp!") Selection.TypeText Text:=invoer With ActiveDocument.Bookmarks .DefaultSorting = wdSortByName .ShowHidden = False End With End Sub
Sluit de VBA-editor af. Vervolgens open je een nieuw document en start de macro TESTFAX door op Extra, Macro, Macro’s, te klikken. Selecteer de macro TESTFAX en klik op Uitvoeren. Vul de gegevens in en controleer of alles correct is ingevuld.
Informatica – Softwareontwikkeling
28
Anja Van Mello
Softwareontwikkeling
Inleiding tot VBA en het gebruik van de editor
5 De VBA-werkomgeving 5.1
De VBA-editor en zijn onderdelen __________________________________
Wanneer we de stap zetten om effectief te gaan programmeren in de MS-Office omgeving, dan worden we geconfronteerd met een nieuwe omgeving. Het is in deze omgeving dat we de code uitwerken in de taal die aan de basis ligt van de macro’s, namelijk VBA. We spreken dan ook over de VBA-editor. Vanuit de verschillende Office-toepassingen kunnen we de editor gaan opstarten. Vanuit MSWord gaat dit bijvoorbeeld via de menukeuze Extra / Macro / Visual Basic Editor of via de sneltoets ALT+F11. We bekomen het volgende scherm
de Projectverkenner
Het codevenster
Hier zullen de eigenschappen van de geselecteerde objecten verschijnen
Informatica – Softwareontwikkeling
In het controlevenster kan men de uitvoering van de code opvolgen
29
Anja Van Mello
Softwareontwikkeling
Inleiding tot VBA en het gebruik van de editor
We maken een onderscheid tussen: De menubalk, De werkbalk, Het codevenster, De projectverkenner, Het venster ‘Eigenschappen,’ Het venter ‘Controle,’ Het venster ’Lokale variabelen,’ Het venster ‘Direct’. De laatste twee zijn niet zichtbaar op de figuur. Men kan immers ten allen tijde kiezen om een venster te verbergen en/of opnieuw op te roepen. Enkel het codevenster dient natuurlijk steeds zichtbaar te blijven.
5.2
De projectverkenner _____________________________________________
Wat wordt er nu eigenlijk getoond? Laat ons beginnen met de projectverkenner, want dit is eigenlijk het hart van de programmatie in de VBA-omgeving. Het projectvenster toont immers de inhoud en de structuur van ons project. Het project in het voorbeeld bestaat uit: het basissjabloon Normal.dot met daarin: de referentie naar de verschillende componenten (objecten) van de MS-Word omgeving; de verschillende modules met bijvoorbeeld de door ons opgenomen macro's in de module newmacros. het project dat refereert naar het geopende document met daarin: de referentie naar de verschillende componenten (objecten) van de MS-Word omgeving; de verschillende modules met programmacode die zullen worden aangemaakt in de loop van het project. We zien dus dat in de MS-Word omgeving elk document als het ware als een apart project wordt aanzien. Bovenop deze code, beschikbaar binnen één document, kan men ook gebruik maken van een overkoepelende set aan modules en procedures (de nieuwe naam voor macro's) binnen het sjabloon Normal.dot.
Informatica – Softwareontwikkeling
30
Anja Van Mello
Softwareontwikkeling
5.3
Inleiding tot VBA en het gebruik van de editor
Het codevenster _________________________________________________
Hierin gebeurt het eigenlijke werk. Men kan nieuwe procedures toevoegen of bestaande aanpassen. Een procedure start steeds met het codewoord "Sub" + de naam van de procedure en moet eindigen met het codewoord "End sub". Er bestaan ook andere mogelijke sleutelwoorden, maar daarover later meer. Laat ons nog een even gaan kijken naar de code die het systeem heeft aangemaakt voor de macro "aanmaning" die we hebben aangemaakt.
Hier kunnen we de gewenste procedure selecteren
De procedurecode staat tussen sub aanmaning Commentaarlijnen beginnen met ' en verschijnen in het groen
In het codevenster zien we alle procedures van een module (in dit geval "NewMacros") onder elkaar uitgelijst Merk op dat de codewoorden herkend worden door de interface en automatisch in het blauw verschijnen. Wanneer men met de cursor op zo'n codewoord staat en op de functietoets drukt, dan bekomt men onmiddellijk de "help"-informatie omtrent dit codewoord. Deze geeft de syntax voor het gebruik aan, evenals de mogelijkheid om een voorbeeld te bekijken. Bovenaan in dit codevenster bevinden er zich 2 keuzelijsten. Wanneer we vanuit MS-Word werken dan toont de rechtse keuzelijst een opsomming van de beschikbare procedures (macro's). We zullen later zien dat de linkse keuzelijst een opsomming toont van de verschillende objecten zoals dialoogvensters, knoppen, …
Informatica – Softwareontwikkeling
31
Anja Van Mello
Softwareontwikkeling
5.4
Inleiding tot VBA en het gebruik van de editor
Het venster ‘Eigenschappen’ ______________________________________
Dit geeft een overzicht van alle eigenschappen van een object. Zo kan het een lijst aanbieden met alle eigenschappen van het document waarin men aan het werken is, of de lijst van eigenschappen van een formulier dat men aan het maken is. We zullen het venster dan ook nodig hebben wanneer we dialoogvensters uitwerken. In eerste instantie is het hier dat we de naam van een module kunnen aanpassen.
5.5
Het venster ‘Controle’ ____________________________________________
Dit verschijnt automatisch wanneer in het project controle-expressies worden gedefinieerd.
Informatica – Softwareontwikkeling
32
Anja Van Mello
Softwareontwikkeling
Inleiding tot VBA en het gebruik van de editor
Je kunt: het formaat van kolomkoppen wijzigen door het kader naar rechts te slepen om de kolomkop groter te maken of naar links om de kolomkop kleiner te maken; een geselecteerde variabele naar het venster Direct of het venster Controle slepen; het venster sluiten door op het vak Sluiten te klikken. Als dit vak niet zichtbaar is, dubbelklik je op de Titelbalk om het te openen. Je kunt er alsnog op klikken om het venster te sluiten. Vensterelementen Expressie Waarde
Type Context
Bevat de controle-expressie. Bevat de waarde van de expressie op het moment waarop werd overgeschakeld op de onderbrekingsmodus. Je kunt een waarde bewerken en op ENTER, PIJL-OMHOOG, PIJLOMLAAG, TAB of SHIFT+TAB drukken of op het scherm klikken om de wijziging te valideren. Als de waarde ongeldig is, blijft het veld Bewerken actief en wordt de waarde gemarkeerd. Bovendien verschijnt een berichtvenster waarin de fout wordt beschreven. Je kunt een wijziging annuleren door op ESC te drukken. Geeft het expressietype weer. Bevat de context van de controle-expressie. Als de context van de expressie niet binnen het bereik ligt wanneer op de onderbrekingsmode wordt overgeschakeld, wordt de huidige waarde niet weergegeven. Je kunt het venster sluiten door op het vak Sluiten te klikken. Als dit vak niet zichtbaar is, dubbelklik je op de Titelbalk om het te openen. Je kunt er alsnog op klikken om het venster te sluiten.
Hoe je er de controle-expressies in krijgt zullen we later zien wanneer we dieper ingaan op het debuggen van de VBA-code.
5.6
Het venster ‘Lokale variabelen’ ____________________________________
Dit venster toont automatisch alle gedeclareerde variabelen in de huidige procedure samen met de bijbehorende waarden.
Informatica – Softwareontwikkeling
33
Anja Van Mello
Softwareontwikkeling
Inleiding tot VBA en het gebruik van de editor
Wanneer het venster Lokale variabelen wordt weergegeven, wordt de informatie in het venster automatisch bijgewerkt wanneer van de uitvoeringsmodus wordt overgeschakeld op de onderbrekingsmodus of wanneer je door de stackweergave bladert. Je kunt: het formaat van kolomkoppen wijzigen door het kader naar rechts of naar links te slepen; het venster sluiten door op het vak Sluiten te klikken. Als dit vak niet zichtbaar is, dubbelklikt u op de Titelbalk om het te openen. Je kunt er alsnog op klikken om het venster te sluiten. Vensterelementen Knop Opgeroepen stack Expressie
Waarde
Type
Opent het dialoogvenster Opgeroepen stack. Dit venster bevat een overzicht van de stack met opgeroepen procedures. Bevat de namen van de variabelen. De eerste variabele in de lijst is een speciale modulevariabele die kan worden uitgebreid, zodat alle variabelen op moduleniveau in de huidige module worden weergegeven. Voor een klassenmodule is de systeemvariabele <Me> gedefinieerd. Voor standaardmodules is de eerste variabele de . Via het venster Lokale variabelen kan geen toegang worden verkregen tot globale variabelen en variabelen in andere projecten. De gegevens in deze kolom kunnen niet worden bewerkt. Bevat de waarden van de variabelen. Wanneer je op een waarde in de kolom Waarde klikt, verandert de cursor in een I-cursor. Je kunt een waarde bewerken en op ENTER, PIJLOMHOOG, PIJL-OMLAAG, TAB of SHIFT+TAB drukken of op het scherm klikken om de wijziging te valideren. Als de waarde ongeldig is, blijft het veld Bewerken actief en wordt de waarde gemarkeerd. Bovendien verschijnt een berichtvenster waarin de fout wordt beschreven. Je kunt een wijziging annuleren door op ESC te drukken. Voor numerieke variabelen moet in deze kolom een waarde worden weergegeven. Voor een reeksvariabele kan deze kolom leeg zijn. Variabelen met subvariabelen kunnen worden uitgebreid of samengevouwen. Voor samengevouwen variabelen wordt geen waarde weergegeven. Voor de subvariabelen worden wel waarden weergegeven. Links van de variabele wordt het pictogram Uitbreiden of het pictogram Samenvouwen weergegeven. Geeft het type van de variabele weer. De gegevens in deze kolom kunnen niet worden bewerkt.
Informatica – Softwareontwikkeling
34
Anja Van Mello
Softwareontwikkeling
5.7
Inleiding tot VBA en het gebruik van de editor
Het venster ‘Direct’ ______________________________________________
In dit venster kun je: Een programmacoderegel typen of plakken en op ENTER drukken om de regel uit te voeren. De programmacode van het venster Direct naar het venster Programmacode kopiëren of plakken, maar in het venster Direct kun je geen programmacode opslaan. Het venster Direct kan naar een willekeurige locatie op het scherm worden gesleept, tenzij je op de tab Dokbaar van het dialoogvenster Opties hebt opgegeven dat het venster Direct een dokbaar venster is. Je kunt het venster sluiten door op het vak Sluiten te klikken. Als het vak Sluiten niet zichtbaar is, dubbelklik je op de titelbalk zodat het vak Sluiten zichtbaar wordt en klik je vervolgens op het vak. Opmerking: Tijdens de onderbrekingsmodus wordt een instructie in het venster Direct uitgevoerd binnen de context of het bereik in het vak Procedure. Als je bijvoorbeeld Print naam variabele typt, bestaat de uitvoer uit de waarde van een lokale variabele. Het resultaat is hetzelfde als wanneer de methode Print zou zijn uitgevoerd in de procedure die werd uitgevoerd op het moment dat het programma werd onderbroken.
Informatica – Softwareontwikkeling
35
Anja Van Mello
Softwareontwikkeling
5.8
Inleiding tot VBA en het gebruik van de editor
De menubalk____________________________________________________
Wanneer het VBA venster is geactiveerd, wordt de Visual Basic menubalk getoond. De Visual Basic menubalk bevat de volgende menu's en commando's: Visual Basic menu bar Bestand
Bewerken
Opslaan, Bestand importeren…, Bestand exporteren…, Verwijderen <>, Afdrukken…, Sluiten en terugkeren naar <<de oproepende applicatie>> Naast de haast klassieke opties beschik je hier over een aantal specifieke opties zoals: Makkelijk leesbare code kun je bekomen aan de hand van het gepast inspringen van je code Het werken met de editor wordt aanzienlijk vereenvoudigd door middel van deze opties, die je extra info ter beschikking stellen betreffende de syntax van de VBAtaal Net als in een MSWord document kun je bladwijzers in je code plaatsen
Beeld
Invoegen
Informatica – Softwareontwikkeling
Deze menu-optie biedt je de mogelijkheid om je omgeving aan te passen aan je eigen smaak. Je kunt de verschillende deelvensters zoals die in het vorige deel zijn besproken openen of sluiten. Je kunt ook de werkbalk(en) aanpassen. Een nuttige extra werkbalk die je kunt oproepen is deze voor de foutopsporing. Hierover zullen we later nog uitgebreid hebben. Voeg een extra element toe aan het project. Kies dit uit de lijst: UserForm; Module; KlassenModule; Procedure.
36
Anja Van Mello
Softwareontwikkeling
Opmaak Foutopsporing
Uitvoeren
Extra
Invoegtoepassingen
Venster Help
Inleiding tot VBA en het gebruik van de editor
De verschillende mogelijkheden die hier worden aangeboden zijn voornamelijk van toepassing bij de aanmaak van formulieren. De verschillende opties zijn zoals de naam van het menu-item het reeds laat raden bestemd voor de foutopsporing binnen een module. De eerste optie kunnen we er reeds even uitlichten. Met behulp van de optie “Project compileren” kun je de editor een extra controle laten uitvoeren op de correctheid van je code. Het is toch de bedoeling dat de code die je aanmaakt vroeg of laat eens wordt uitgevoerd. Die kun je bewerkstelligen door middel van het opstarten van een macro, maar ook rechtstreeks vanuit deze menu-optie. Hierin zitten een aantal opties vervat die je toelaten om de VBAomgeving verder aan te passen aan je eigen behoeften. Een duidelijk voorbeeld hiervan is het gebruik van de optie “Verwijzingen”. Zoals we verder nog regelmatig zullen zien, maakt de VBA omgeving vaak gebruik van extra bibliotheken. Dit kan maar pas wanneer het project ernaar kan verwijzen. Je kunt ook invoegtoepassingen installeren in de VBA-editor. Een voorbeeld van een interessante invoegtoepassing is VBACodePrint. Deze toepassing maakt het je mogelijk om een nette afdruk (in kleur) van je code te bekomen. De toepassing voegt een extra werkbalk toe aan de omgeving: De standaard menu-optie De VBA-editor biedt een enorm krachtige en nuttige help aan. De meest eenvoudige wijze om deze op te roepen is door een woord te typen en vervolgens op de -toets te drukken. Het systeem biedt dan onmiddellijk de gevonden mogelijkheden aan.
Daarnaast zijn er een aantal snelmenu's, die verschijnen wanneer je op een object rechtsklikt.
5.9
De Standard toolbar van VBA ______________________________________
De knoppen van de Standard toolbar van VBA zijn: De standaard werkbalk van Microsoft Visual Basic Beeld Microsoft Word Schakel over naar het MS-Word venster (of een andere applicatie) Voeg een extra element toe aan het project. Kies dit uit de Invoegen lijst: UserForm; Module; KlassenModule; Procedure.
Informatica – Softwareontwikkeling
37
Anja Van Mello
Softwareontwikkeling
Bewaren Knippen Kopiëren Plakken Zoeken Ongedaan maken Opnieuw uitvoeren Sub/UserForm uitvoeren Onderbreken Reset Ontwerp Mode Project Verkenner Eigenschappen venster Objectenoverzicht Werkset Office Assistent Ln i, Col i
Informatica – Softwareontwikkeling
Inleiding tot VBA en het gebruik van de editor
Bewaar het MS-Word document met de bijbehorende modules. Knip (verplaats) de geselecteerde tekst naar het klembord. Kopieer de geselecteerde tekst naar het klembord. Plak (kopieer) de inhoud van het klembord op de plaats van het invoegpunt. Zoek een tekst. Maak de laatst uitgevoerde actie ongedaan. Voer de laatst ongedane actie opnieuw uit. Voer een procedure uit of open een invulformulier. Onderbreek de uitvoering van een procedure. Onderbreek de uitvoering van een procedure en maak indien mogelijk alle acties ongedaan. Onderbreek de uitvoering van een procedure en ga naar Ontwerp mode, waarin je de procedure kan wijzigen. Open het Project Verkenner venster, waarmee je projecten kan beheren. Open het Eigenschappen venster waarin je de eigenschappen van een object kan bekijken. Open het Objectenoverzicht, waarin je een object kan kiezen. Toon de werkset werkbalk Roep de Office Assistent op. Aanduiding van de positie van het invoegpunt.
38
Anja Van Mello
Softwareontwikkeling
Inleiding tot VBA en het gebruik van de editor
6 Basiselementen van de taal VBA We gaan ons nu wat verdiepen in de wijze waarop we een procedure moeten schrijven. Een procedure is een stuk code dat wordt geplaatst in een module. Een module is dus een verzameling van logisch samenhorende procedures. Binnen de procedure maakt men gebruik van de syntax van de Visual Basic taal. We hebben reeds een voorsmaakje gekregen van deze taal wanneer we gingen kijken hoe het systeem onze aangemaakte macro’s bewaart. Een kernpunt in deze syntax is het werken met objecten. Wat moet men hieronder verstaan? De onderstaande tabel geeft een voorsmaakje: MS-Word
MS-Excel
MS-Access
Object Application Document Page Paragraph Selection Object Application workbook worksheet chart range Object application database field recordset table
Omschrijving een MS-Word sessie een document een pagina binnen een document een alinea binnen een document een geselecteerd stuk tekst Omschrijving een MS-Excel sessie een werkmap eventueel bestaande uit meerdere werkbladen een afzonderlijk werkblad een grafiek een bereik van cellen Omschrijving een MS-Access sessie een geheel van tabellen, query’s, formulieren … een veld binnen de database een record binnen de database een tabel binnen de database
We konden deze lijst nog veel langer maken. Het komt er in feite op neer dat bijna alles wat je in VBA (of beter in de MS-Office omgeving) doet, te maken heeft met het opvragen en/of aanpassen van objecten. Elk element van MS-Word (documenten, alinea's, velden, bladwijzers, enzovoort) kan in VBA worden voorgesteld door een object.
Informatica – Softwareontwikkeling
39
Anja Van Mello
Softwareontwikkeling
6.1
Inleiding tot VBA en het gebruik van de editor
De basiselementen van de VBA-taal ________________________________
Wat zijn objecten en collecties? Een object is een bepaald element van Word, zoals een document, een alinea, een bladwijzer of een teken. Een collectie is een object dat meerdere objecten bevat. Gewoonlijk zijn die objecten van hetzelfde type. Alle bladwijzerobjecten in een document maken deel uit van een collectieobject. Alle openstaande documenten (welke dus ook objecten zijn) maken deel uit van een collectieobject. Door middel van eigenschappen en methoden kun je een object of een collectie objecten aanpassen. Wat is een eigenschap? Een eigenschap is een kenmerk van een object of een aspect van het gedrag van het object. Tot de eigenschappen van een document behoren bijvoorbeeld de documentnaam, de inhoud en de opslagstatus, maar ook of het bijhouden van wijzigingen is ingeschakeld. Als je de kenmerken van een object wilt aanpassen, moet je de waarden van de eigenschappen van dat object wijzigen. Als je een waarde wilt wijzigen, dan plaats je een punt achter de verwijzing naar het object, gevolgd door de naam van de eigenschap, een gelijkteken en de nieuwe waarde van de eigenschap. In het volgende voorbeeld wordt het bijhouden van wijzigingen in het document MyDoc.doc ingeschakeld. Documents("MyDoc.doc").TrackRevisions = True
In dit voorbeeld verwijst Documents naar de collectie geopende documenten, en de naam MyDoc.doc naar een document in deze collectie. De eigenschap TrackRevisions wordt alleen ingesteld voor dit document. Bepaalde eigenschappen kunnen niet worden ingesteld. Het Help-onderwerp voor een eigenschap geeft aan of die eigenschap kan worden ingesteld (lezen-schrijven) of alleen als resultaat kan worden gegeven (alleen-lezen). Je kan informatie over een object opvragen door de waarde van een eigenschap van het object als resultaat te geven. In het volgende voorbeeld wordt de naam van het actieve document als resultaat gegeven. docName = ActiveDocument.Name
In dit voorbeeld verwijst ActiveDocument naar het document in het actieve venster in Word. De naam van het document wordt toegewezen aan de variabele docName. Opmerking In het Help-onderwerp voor een eigenschap kunt u zien of die eigenschap kan worden ingesteld en als resultaat gegeven (lezen-schrijven), alleen als resultaat kan worden gegeven (alleen-lezen) of alleen kan worden ingesteld (alleen-schrijven). Ook het objectenoverzicht in de Visual Basic Editor geeft hieromtrent informatie. Als een eigenschap is geselecteerd, verschijnt deze informatie onder in het venster.
Informatica – Softwareontwikkeling
40
Anja Van Mello
Softwareontwikkeling
Inleiding tot VBA en het gebruik van de editor
Wat is een methode? Een methode is een actie die door een object kan worden uitgevoerd. Het Document-object beschikt bijvoorbeeld over een PrintOut-methode (te vergelijken met een document dat kan worden afgedrukt). Veel methoden zijn voorzien van argumenten die aangeven hoe de actie wordt uitgevoerd. In het volgende voorbeeld worden de eerste drie pagina's van het actieve document afgedrukt. ActiveDocument.PrintOut From:=1, To:=3
In de meeste gevallen zijn methoden acties, terwijl eigenschappen kenmerken zijn. Het gebruik van een methode heeft tot gevolg dat er iets gebeurt met een object, terwijl het gebruik van een eigenschap tot gevolg heeft dat informatie over het object als resultaat wordt gegeven of dat een kenmerk van het object wordt gewijzigd.
6.2
Een object als resultaat van een actie _______________________________
De meeste objecten worden als resultaat gegeven door één object op te vragen uit de collectie. De Documents-collectie bevat bijvoorbeeld de geopende Word-documenten. Met de eigenschap Documents van het Application-object (het object dat zich boven aan de Wordobjectenhiërarchie bevindt) wordt de Documents-collectie als resultaat gegeven. Nadat u toegang hebt gekregen tot de collectie, kunt u een object als resultaat geven met een indexwaarde tussen haakjes (ongeveer op dezelfde manier als matrices worden gebruikt). De indexwaarde is gewoonlijk een getal of een naam. Klik op een object als resultaat geven uit een collectie voor meer informatie. In het volgende voorbeeld wordt de eigenschap Documents gebruikt om toegang te krijgen tot de Documents-collectie. Het indexnummer wordt gebruikt om het eerste document in de Documents-collectie als resultaat te geven. Vervolgens wordt de methode Close toegepast op het Document-object om het eerste document in de Documents-collectie te sluiten. Documents(1).Close
In het volgende voorbeeld wordt met een tekenreeks die een naam bevat, een Document-object aangeduid in de Documents-collectie. Documents("Sales.doc").Close
Collectieobjecten beschikken vaak over methoden en eigenschappen waarmee u de volledige collectie met objecten kunt aanpassen. Het Documents-object beschikt over een Save-methode waarmee u alle documenten in de collectie kunt opslaan. In het volgende voorbeeld worden alle geopende documenten opgeslagen met de methode Save. Documents.Save
Het Document-object beschikt tevens over een Save-methode waarmee u één document kunt opslaan. In het volgende voorbeeld wordt het document Rapport.doc opgeslagen.
Informatica – Softwareontwikkeling
41
Anja Van Mello
Softwareontwikkeling
Inleiding tot VBA en het gebruik van de editor
Documents("Report.doc").Save
Als u een object als resultaat wilt geven dat zich lager in de Word-objectenhiërarchie bevindt, moet u verder afdalen tot het gewenste object door met eigenschappen en methoden bovenliggende objecten op te vragen. Je kunt zien hoe dit gaat door de Visual Basic Editor te openen en op Objectenoverzicht in het menu Beeld te klikken. Klik aan de linkerkant op Application in de lijst Klassen. Klik vervolgens aan de rechterkant op ActiveDocument in de lijst met leden. De tekst onder aan het objectenoverzicht geeft aan dat de eigenschap ActiveDocument alleen-lezen is en een Document-object als resultaat geeft. Klik op Document onder aan het objectenoverzicht. Het Document-object wordt automatisch geselecteerd in de lijst Klassen en in de lijst Leden van worden de leden van het Document-object weergegeven. Blader door de lijst met leden totdat u Close ziet. Klik op de methode Close. Onder aan het objectenoverzicht wordt de syntaxis voor deze methode weergegeven. Als u meer informatie wilt over deze methode, drukt u op F1 of klikt u op de knop Help. Het Help-onderwerp voor de methode Close wordt vervolgens weergegeven. Op basis van deze informatie kunt u de volgende instructie schrijven waarmee het actieve document wordt gesloten. ActiveDocument.Close SaveChanges:=wdSaveChanges
In het volgende voorbeeld wordt het actieve documentvenster gemaximaliseerd. ActiveDocument.ActiveWindow.WindowState = wdWindowStateMaximize
De eigenschap ActiveWindow geeft als resultaat een Window-object dat het actieve venster voorstelt. De eigenschap WindowState wordt ingesteld op de constante voor maximaliseren (wdWindowStateMaximize). In het volgende voorbeeld wordt een nieuw document gemaakt en wordt het dialoogvenster Opslaan als weergegeven, zodat een naam voor het document kan worden opgegeven. Documents.Add.Save
De eigenschap Documents geeft als resultaat de Documents-collectie. De methode Add maakt een nieuw document en geeft als resultaat een Document-object. Vervolgens wordt de methode Save toegepast op het Document-object. Zoals u ziet kunt u een object bereiken met behulp van methoden en eigenschappen. Dat wil zeggen, u kunt een object als resultaat geven door een methode of eigenschap toe te passen op een object dat zich een stapje hoger in de objectenhiërarchie bevindt. Nadat u het gewenste object als resultaat hebt gegeven, kunt u de methoden en eigenschappen van dat object toepassen. Klik op Microsoft Word-objecten voor een overzicht van de hiërarchie van objecten.
6.3
Extra informatie opvragen over objecten, methoden en eigenschappen ___
Zolang je het objectenmodel van Word nog niet helemaal beheerst, kunt je gebruik maken van de volgende hulpmiddelen bij het doorgronden van de objectenhiërarchie:
Informatica – Softwareontwikkeling
42
Anja Van Mello
Softwareontwikkeling
Inleiding tot VBA en het gebruik van de editor
•
Automatische opsomming leden. Als je in de Visual Basic Editor een punt (.) typt achter een object, wordt een lijst weergegeven met de beschikbare eigenschappen en methoden. Als je bijvoorbeeld Application. typt, wordt een vervolgkeuzelijst met de eigenschappen en methoden van het Application-object weergegeven.
•
Help. Je kunt ook in de Help zoeken naar eigenschappen en methoden die voor een bepaald object beschikbaar zijn. Elk Help-onderwerp over een object bevat koppelingen naar lijsten met de eigenschappen en methoden van dat object. Druk in het objectenoverzicht of in een module op F1 om het bijbehorende Help-onderwerp weer te geven.
•
Microsoft Word-objecten. Dit onderwerp illustreert hoe Word-objecten zijn gerangschikt in de hiërarchie. Klik op een object in de figuur om het bijbehorende Helponderwerp weer te geven.
Informatica – Softwareontwikkeling
43
Anja Van Mello
Softwareontwikkeling
Inleiding tot VBA en het gebruik van de editor
Een dergelijk model bestaat niet enkel voor MS-Word, maar ook voor de andere Microsoft applicaties zoals MS-Excel, MS-Access, MS-Outlook … Door een inzicht te verwerven in dit model kun je via de VBA-code volledig naar je eigen hand zetten. •
6.4
Objectenoverzicht. In het objectenoverzicht in de Visual Basic Editor (zichtbaar gemaakt via de -toets worden de leden (eigenschappen en methoden) van alle objecten, dus ook de Word-objecten, weergegeven.
Een eenvoudig voorbeeld _________________________________________
Laat ons even kijken naar de code die werd aangemaakt voor de macro "TabelHoofding" om de eerste lijn van een tabel wat in te kleuren. Sub TabelHoofding() ' ' TabelHoofding Macro ' Macro opgenomen op 25/05/2001 door Anja Van Mello ' Selection.Shading.Texture = wdTextureNone Selection.Shading.ForegroundPatternColor = wdColorAutomatic Selection.Shading.BackgroundPatternColor = wdColorGray10 Selection.Font.Bold = wdToggle End Sub
Informatica – Softwareontwikkeling
De procedure is van toepassing op een stuk geselecteerde tekst, in dit geval een aantal geselecteerde cellen van een tabel
44
Anja Van Mello
Softwareontwikkeling
6.5
Inleiding tot VBA en het gebruik van de editor
Wat kunnen we hieruit leren? ______________________________________