Cursus Word
Hoofdstuk 10. Macro's, VBA
10.1. Een macro maken
Als je een macro maakt dan neem je op welke toetsaanslagen er worden gebruikt, en als je later die macro uitvoert worden precies
de toetsaanslagen uitgevoerd die waren opgenomen.
Stel dat je regelmatig een woord hebt, waarvan je de letters rood wilt afdrukken, en vetgedrukt, met een grijze achtergrond.
Dan kun je dat elke keer met een aantal handelingen doen, maar je kunt er ook een macro voor maken en die later gebruiken.
Dat doe je op de volgende manier:
-
Zet allereerst de cursor op de eerste letter van het woord dat je die opmaak wilt geven.
- Klik in het menu op Extra → Macro → Nieuwe macro opnemen
- Dan verschijnt er een venster, waarin je de naam voor de macro moet vastleggen. Noem de macro bijvoorbeeld rood_op_grijs.
- Als je op het toetsenbord klikt dan kun je aangeven met welke toets(en) je de macro op wilt roepen.
Klik dus op het toetsenbord, en druk dan bijvoorbeeld op Alt/R (d.w.z. Alt en R tegelijk indrukken). Klik dan op Toewijzen
en dan op Sluiten
Dan kun je later de macro laten uitvoeren door op Alt/R te drukken.
- Vanaf nu wordt alles wat je met het toetsenbord of de muis doet opgenomen, dat zie je
aan
-
Druk op Ctrl/→ terwijl je de shift-toets houdt ingedrukt. Dan wordt het woord geselecteerd (zonder de muis te gebruiken).
- Klik dan op B (vet) in de werkbalk.
- Kies tekstkleur rood (A op de werkbalk, klik op het pijltje ernaast, en kies rood uit)
- Kies verder nog een grijze achtergrondkleur (klik op het pijltje naast de markeerstift, en kies voor grijs).
- Daarmee is de opmaak klaar, klik dan op Opname stoppen, het linker blokje van
Als je nu een ander woord diezelfde opmaak wilt geven dan klik je op de eerste letter van het woord, en je drukt op Alt/R.
10.2. Een macro uitvoeren en/of bewerken
Als je de macro uit de vorige paragraaf uit wilt voeren dan kun je Alt/R indrukken. Maar je kunt de macro ook op een nadere manier
uitvoeren:
Klik in het menu op Extra → Macro → Macro's
Dan verschijnt er een venster, waarin alle aanwezige macro's worden getoond. Klik op de macro rood_op_grijs, en klik op Uitvoeren
Als je op Bewerken klikt, in plaats van op Uitvoeren, dan krijg je het volgende programma te zien:
(onder Sub rood_op_grijs() staan nog een paar groen-gedrukte regels, voorafgegaan door een '-teken. Dat zijn zogenaamde
commentaar-regels. Ze hebben niets te maken met de werking van het programma, ze staan er alleen bij ter verduidelijking)
Sub rood_op_grijs()
Selection.MoveRight Unit:=wdWord, Count:=1, Extend:=wdExtend
Selection.Font.Bold = wdToggle
Selection.Font.Color = wdColorRed
Selection.Range.HighlightColorIndex = wdGray25
End Sub
Als er een macro wordt opgenomen in Word maakt Word automatisch een VBA-programma, waarin staat wat er moet gebeuren.
En dat kun je eventueel zelf aanpassen.
Verander Count:=1 maar eens in Count:=2, sluit het VBA-venster af, klik op de beginletter van een woord, en druk op Alt/R.
Dan krijgen twee woorden de vastgelegde opmaak, in plaats van één woord!
10.3. Visual Basic for Applications (VBA)
Je komt op de volgende manier in de Visual Basic-programmeeromgeving terecht:
Klik in het menu op Extra → Macro → Visual Basic Editor
De Visual Basic programmeeromgeving is een volledig zelfstandige toepassing die in een eigen venster draait.
Een paar syntaxisregels:
10.4. Voor- en achternamen omdraaien
Stel dat je een lijstje met namen in Word hebt, waarbij telkens eerst de voornaam staat, en daarachter de achternaam.
En stel nu dat je om de één of andere reden de voornaam graag achter de achternaam wilt hebben, gescheiden door een
komma.
Dan kun je dat handig met een macro doen.
Dat doe je op de volgende manier:
-
Zet allereerst de cursor op de eerste letter van de eerste naam.
- Klik in het menu op Extra → Macro → Nieuwe macro opnemen
Geef de macro bijvoorbeeld de naam omwisselen. En klik op OK.
- Vanaf dat moment wordt alles opgenomen.
-
Druk op Ctrl/→ terwijl je de shift-toets houdt ingedrukt. Dan wordt het woord geselecteerd, dus de
voornaam.
- Druk op Ctrl/X , dan wordt die voornaam verwijderd.
- Druk op End, dan springt de cursor naar het eind van de regel, dus naar de plaats achter de achternaam.
- Typ nu een komma en een spatie, die verschijnen dan achter de achternaam.
- Druk op Ctrl/V , dan wordt de voornaam, die eerst verwijderd was maar nog in het geheugen zit, achter de achternaam
geplakt.
- Druk op Ctrl/→ , dan springt de cursor naar het volgende woord, dus naar de eerste letter van de
voornaam op de volgende regel.
En daarna kan het proces opnieuw beginnen, want die voornaam moet ook weer achter de achternaam worden geplakt, maar dat komt later.
- Daarmee is de macro klaar, klik op Opname stoppen.
Als je wilt het VBA-programma wilt zien, dat automatisch gemaakt is toen de macro is opgenomen, dan klik je in het menu op
Extra → Macro → Macro's
Klik op de macro omwisselen, en klik op Bewerken, dan krijg je het volgende programma te zien:
Sub omwisselen()
(1) Selection.MoveRight Unit:=wdWord, Count:=1, Extend:=wdExtend
(2) Selection.Cut
(3) Selection.EndKey Unit:=wdLine
(4) Selection.TypeText Text:=" ,"
(5) Selection.Paste
(6) Selection.MoveRight Unit:=wdWord, Count:=1
End Sub
Deze macro heeft tot gevolg dat de voor- en achternaam op één regel worden omgewisseld.
Regel (1) heeft tot gevolg dat het woord (en de spatie die erachter staat), waarop de cursor staat, wordt geselecteerd.
Door de code op regel (2) wordt het geselecteerde woord verwijderd.
Regel (3) is de opdracht om de cursor naar het einde van de regel te verplaatsen.
Regel (4) zorgt ervoor dat er een spatie en een komma worden toegevoegd.
Regel (5) heeft tot gevolg dat het woord, dat eerst verwijderd was, geplakt wordt op de plaats van de cursor.
En door de code op regel (6) springt de cursor naar de eerste letter van het volgende woord, en dat staat op de volgende regel.
Wil je dat alle voor- en achternamen worden omgewisseld, dan moet je er voor zorgen dat het programma, dat nu is vastgelegd, steeds
herhaald wordt tot het einde van het Word-document is bereikt.
Dat doe je door de volgende regel aan het begin toe te voegen:
While Selection.Type = wdSelectionIP And Selection.End <> ActiveDocument.Content.End - 1
en achteraan moet je nog een regel toevoegen waarop het volgende staat:
wend
Het totale programma ziet er dan als volgt uit:
Sub omwisselen()
While Selection.Type = wdSelectionIP And Selection.End <>
_ActiveDocument.Content.End-1
Selection.MoveRight Unit:=wdWord, Count:=1, Extend:=wdExtend
Selection.Cut
Selection.EndKey Unit:=wdLine
Selection.TypeText Text:=" ,"
Selection.Paste
Selection.MoveRight Unit:=wdWord, Count:=1
Wend
End Sub
En als je deze macro dan laat uitvoeren, dan worden alle voor- en achternamen omgewisseld, zelfs al zijn het er honderden.
En nu het omgekeerde
Stel je voor dat je het laatste lijstje hebt, dus eerst de achternaam, dan een komma, en dan de voornaam.
En je wilt de voornamen naar voren halen.
Dan kun je daar niet dezelfde macro voor gebruiken als hierboven, want de achternaam bestaat soms uit meer dan één
woord. De achternaam kan dus niet geselecteerd worden door op Ctrl/→ te klikken, want dan
wordt er maar één woord geselecteerd.
Je kunt het nu op de volgende manier doen:
-
Zet allereerst de cursor op de eerste letter van de eerste naam.
- Klik in het menu op Extra → Macro → Nieuwe macro opnemen
Geef de macro een naam en klik op OK.
-
Klik in het menu op Bewerken → Zoeken, typ in het zoek-venster een komma, en klik
op Volgende zoeken.
Dan springt de cursor naar de eerstvolgende komma, en die staat vlak achter de achternaam. Maar de achternaam wordt niet geselecteerd,
daar moeten we nu nog voor zorgen.
- Druk op Home, terwijl je de shifttoets houdt ingedrukt. Dan springt de cursor naar het begin van de regel, en alles
ertussen wordt geselecteerd, dus de achternaam.
- Druk op Ctrl/X , dan wordt die achternaam (maar niet de komma) verwijderd, en op het klembord gezet.
- Druk twee keer op de Delete-toets ,dan wordt de komma en de spatie voor de voornaam verwijderd.
- Druk op End, dan springt de cursor naar het eind van de regel, dus naar de plaats achter de voornaam.
- Typ nu een spatie, die verschijnt dan achter de voornaam.
- Druk op Ctrl/V , dan wordt de achternaam, die eerst verwijderd was, achter de voornaam geplakt.
- Druk op Ctrl/→ , dan springt de cursor naar het volgende woord, dus naar de eerste letter van de
voornaam op de volgende regel.
- Daarmee is de macro klaar, klik op Opname stoppen.
Dan wordt de achternaam achter de voornaam geplakt bij één regel.
Wil je dat macro alle namen bijlangs gaat, zorg er dan voor dat het programmagedeelte herhaald wordt.
Het totale programma ziet er dan als volgt uit:
Sub voornaamvooraan()
While Selection.Type = wdSelectionIP And Selection.End <>
_ActiveDocument.Content.End-1
Selection.Find.ClearFormatting
With Selection.Find
.Text = ","
.Replacement.Text = ""
.Forward = True
.Wrap = wdFindContinue
.Format = False
.MatchCase = False
.MatchWholeWord = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
End With
Selection.Find.Execute
Selection.HomeKey Unit:=wdLine, Extend:=wdExtend
Selection.Cut
Selection.Delete Unit:=wdCharacter, Count:=1
Selection.Delete Unit:=wdCharacter, Count:=1
Selection.EndKey Unit:=wdLine
Selection.Paste
Selection.MoveRight Unit:=wdWord, Count:=1
Wend
End Sub
10.5. Nog een macro-voorbeeld: een breuk maken
Stel dat je regelmatig breuken typt, en je wilt graag dat die breuken zo worden afgedrukt dat de teller iets hoger staat dan de
noemer, dan kun je dat handig met een macro doen.
Stel dat je de volgende regel hebt:
En je wilt die regel zo veranderen dat hij er zo uitziet:
Dan maak je daar een macro voor op de volgende manier:
-
Zet allereerst de cursor ergens in de breuk 13/17, bijvoorbeeld op de laatse 7.
- Klik in het menu op Extra → Macro → Nieuwe macro opnemen
Geef de macro bijvoorbeeld de naam breukmaken. En klik op OK.
- Vanaf dat moment wordt alles opgenomen.
- Klik in het menu op Bewerken → Zoeken
Vul achter Zoeken naar een spatie in, en kies bij Zoekrichting voor omhoog
(als Zoekrichting er niet bij staat klik je eerst op Meer)
Klik dan op Volgende zoeken. Dan springt de cursor naar de spatie voor de breuk. Klik het zoek-venster dan weg.
-
Druk dan op Ctrl/→ terwijl je de shift-toets houdt ingedrukt. Dan wordt het eerstvolgende woord
geselecteerd, dus de teller van de breuk.
- Klik in het menu op Opmaak → Lettertype en zet een vinkje voor Superscript,
klik dan op OK. Dan wordt de teller in superscript gezet, dus in kleinere tekens die iets hoger staan.
- Druk twee keer op → , dan springt de cursor over de scheve breukstreep / naar het begin
van de noemer.
- Druk dan op Ctrl/→ terwijl je de shift-toets houdt ingedrukt. Dan wordt het eerstvolgende woord
geselecteerd, dus de noemer van de breuk.
- Klik in het menu op Opmaak → Lettertype en zet een vinkje voor Subscript,
klik dan op OK. Dan wordt de noemer in subscript gezet, dus in kleinere tekens die iets lager staan.
- Druk op → , dan springt de cursor naar het volgende teken, en dan is er niets meer
geselecteerd.
- Daarmee is de macro klaar, klik op Opname stoppen.
Als je wilt het VBA-programma wilt zien, dat automatisch gemaakt is toen de macro is opgenomen, dan klik je in het menu op
Extra → Macro → Macro's
Klik op de macro breukmaken, en klik op Bewerken, dan krijg je het volgende programma te zien:
Sub breukmaken()
Selection.Find.ClearFormatting
With Selection.Find
.Text = " "
.Replacement.Text = ""
.Forward = False
End With
Selection.Find.Execute
Selection.MoveRight Unit:=wdWord, Count:=1, Extend:=wdExtend
With Selection.Font
.Superscript = True
End With
Selection.MoveRight Unit:=wdCharacter, Count:=2
Selection.MoveRight Unit:=wdWord, Count:=1, Extend:=wdExtend
With Selection.Font
.Subscript = True
End With
Selection.MoveRight Unit:=wdCharacter, Count:=1
End Sub
Als je nu de cursor ergens in de breuk km/uur zet, en je laat de macro breukmaken uitvoeren, dan wordt km in superscript en
uur in subscript gezet.
10.6. Tekstvakken, labels en buttons met VBA
Stel dat je een groot document hebt waar op zo'n tien plaatsen een bepaalde naam moet worden ingevoerd (steeds dezelfde naam), en
op bijv. zes plaatsen een adres (steeds hetzelfde adres).
Als dat document vaak moet worden gebruikt, voor verschillende mensen (bijv. bij een notaris), dan is het handig er voor te zorgen
dat het wordt geautomatiseerd.
Dat kan m.b.v. VBA.
Als je dan in het eerste tekstvenster een naam invult, en in het tweede tekstvak vul je een adres in, en je klikt op
de opdrachtknop, dan wordt de ingevoerde naam op de tien plaatsen ingevuld, en het ingevoerde adres op vijf plaatsen.
Tenminste als je de bladwijzers had aangebracht.
Verklaring van het programma:
Selection.GoTo What:=wdGoToBookmark, Name:="naam1"
betekent: breng de cursor naar de plaats van de bladwijzer met de naam "naam1".
Selection.TypeText TextBox1.Text
betekent: plaats de tekst, die is ingevoerd in het eerste tekstvak, op de plaats van de cursor.
En zo zorgen de volgende opdrachten er voor dat ook op de andere plaatsen de naam of het adres wordt geplaatst.
|