« vorige 1 2 3 4 volgende »

Geavanceerde macro's in Word

Geavanceerde macro's in Word

Filip Leys - 17 mei 2010, 16:22

Wellicht weten sommige Word-gebruikers wel hoe ze een vaak te herhalen serie handelingen, tekst en manipulaties kunnen opnemen en met één toetscombinatie automatisch kunnen herhalen: een Word-macro. Maar zonder het te beseffen, gaan ze op die manier aan de slag met een bijzonder krachtige functionaliteit die achter elke module van Microsoft Office steekt: Visual Basic for Applications, kortweg VBA. Op deze manier gaat de deur open voor een wereld van zelf te ontwikkelen snufjes, trucjes en andere spitsvondigheden.

Op zoek naar de kortste routine

Opgenomen code bevat doorgaans heel wat overbodige instellingen, die we mogen schrappen als we er zeker van zijn dat de instellingen van (bijvoorbeeld) de zoek/vervangdialoog nog steeds de standaardwaarden vertonen. Laten we de Option Explicit achterwege (een gevaarlijke, maar vaak toegepaste slordigheid in VBA en verwante talen), dan kunnen we eveneens de declaraties overboord gooien. Dit levert de volgende minimalistische subroutine op, die precies hetzelfde effect heeft:

Klik hier om de code te downloaden

Maar besparen op tikwerk is niet altijd een goede zaak. In dit voorbeeld hebben we de Len-functie en (zelfs tot tweemaal toe) de Mid-functie in de lus ondergebracht. Dit betekent dat de berekening van hun resultaat bij elke herhaling opnieuw uitgevoerd gaat worden. Niet dat we de extra rekenkracht die dit vergt, echt gaan voelen op een doorsnee hedendaagse pc, maar in complexe programma's, waarin misschien nog veel andere dingen dienen te gebeuren in zo'n lus, is dit wel een aandachtspunt.

Matrices

Om knip- en plakwerk via allerlei tekstfuncties te vermijden, vormen matrices ('arrays' in het Engels) een interessant alternatief. We stoppen eerst onze eindetekens als losse karakters in een matrix door middel van de Array-functie, en doorlopen die vervolgens in een lus. Geen functies meer nodig, geen onnodig rekenen. Opgelet: het eerste element van een matrix krijgt altijd de index 0, tenzij we dit expliciet anders zouden willen. Dit laatste is instelbaar met de instructie Option Base.

Klik hier om de code te downloaden

Willen we vermijden om de bovenlimiet van de matrix hard gecodeerd in de subroutine te hebben, dan kunnen we ook de functie UBound (als in 'Upper Bound' of bovengrens) gebruiken.

For k = 0 To UBound(AlleEindeTekens)

Als de matrix AlleEindeTekens drie elementen bevat, dan zal dat standaard op de plaatsen met index 0, 1 en 2 zijn, en dan is UBound(AlleEindeTekens) gelijk aan de hoogste van die indices, dus 2.

Drie subroutines, driemaal hetzelfde ­effect, maar het blijft zoeken naar het beste compromis tussen hoeveelheid tikwerk en leesbaarheid.

Tot slot

Laat u niet afschrikken door de ogenschijnlijke complexiteit van de macrotaal van Word. Eenvoudig is anders, maar met een beetje experimenteren is er heel veel mogelijk. Via deze link vindt u meer informatie en enkele uitgebreide voorbeelden, zodat u binnen een oogwenk uw eigen macro in elkaar sleutelt! Succes!

En de toekomst?

Microsoft kwam voor het eerst op de proppen met VBA in 1993. We hebben dus te maken met een heus oudje in de informatica­wereld. Sinds 2007 wordt het ook niet langer ter beschikking gesteld aan derden. Maar gezien het nog steeds achter de meest recente versie 2007 en de toekomstige 2010 release van Microsoft Office te vinden is en zal zijn, en Microsoft er garant voor staat dat alle VBA-ontwikkelingen nog perfect gaan werken onder Vista, Windows 7 en Server 2008, zijn we zeker nog enkele jaren zoet met deze programmeertaal.

« vorige 1 2 3 4 volgende »

blog comments powered by Disqus