Op deze website gebruiken we cookies om content en advertenties te personaliseren, om functies voor social media te bieden en om ons websiteverkeer te analyseren. Ook delen we informatie over uw gebruik van onze site met onze partners voor social media, adverteren en analyse. Deze partners kunnen deze gegevens combineren met andere informatie die u aan ze heeft verstrekt of die ze hebben verzameld op basis van uw gebruik van hun services. Meer informatie.

Akkoord

Word-macro: alle afkortingen uit een tekst halen

Door: | 26 maart 2010 09:41

None
Apps & Software

Een nuttige bijlage in een document is een verklarende lijst van alle gebruikte afkortingen en acroniemen. Maar als u tijdens het opstellen van de tekst permanent attent hoort te zijn op die dingen, dan gaat het niet vooruit. Liever alles in één ruk uitschrijven, en daarna het speurwerk aan een macro overlaten!

In de woordenlijst dienen alle termen te komen van minstens twee tekens lang, die in de tekst volledig in hoofdletters geschreven staan, eventueel met puntjes achter elke letter. De macro moet dus bijvoorbeeld EU of A.I.D.S. opsporen, maar mag woorden als cao of Uefa links laten liggen.

Dergelijke karaktercombinaties kunnen opgespoord worden met de jokertekens binnen de zoekfunctie van Word: zoek naar [A-Z.]{2,} (de komma na de 2 kan ook een puntkomma zijn, als dit het in Windows gedefinieerde scheidingsteken is). De blokhaken bakenen een herhaling af, die vervolgens minstens tweemaal dient herhaald te worden: dit is wat binnen de accolades staat. De herhaling kan alle tekens tussen A en Z (hoofdletters, dus) zijn of een punt. Probeer maar eens uit op een bestaande tekst!

Met de jokertekens binnen de zoekfunctie van Word maakt u krachtige opsporingen.

In deze macro zijn twee hoofdbewerkingen nodig: eerst de zoekactie, waarbij de aangetroffen afkortingen (lees: de stukjes tekst – Range in VBA jargon – die door de opeenvolgende zoekacties gevonden worden) naar een nieuw document gekopieerd worden, en vervolgens het ontdubbelen.

[code]Sub VerzamelAcroniemen()

Dim EenAcroniem As Range

Dim HuidigDocument As Document

Dim AcroniemenLijst As Document

Set HuidigDocument = ActiveDocument

Set AcroniemenLijst = Documents.Add

HuidigDocument.Activate

With Selection

.HomeKey wdStory

With .Find

.ClearFormatting

.Replacement.ClearFormatting

.Replacement.Text = ""

Do While .Execute(findText:="[A-Z.]{2;}", _

MatchWildcards:=True, _

Wrap:=wdFindStop, Forward:=True)

Set EenAcroniem = Selection.Range

AcroniemenLijst.Range.InsertAfter EenAcroniem & vbCr

EenAcroniem.Collapse wdCollapseEnd

Loop

End With

End With

With AcroniemenLijst

.Range.Sort ExcludeHeader:=False, _

FieldNumber:="Paragraphs", _

SortFieldType:=wdSortFieldAlphanumeric, _

SortOrder:=wdSortOrderAscending

p = 2

Do

If .Paragraphs(p).Range = .Paragraphs(p - 1).Range Then

.Paragraphs(p).Range.Delete

Else

p = p + 1

End If

Loop Until p > .Paragraphs.Count

.Activate

End With

End Sub[/code]

Deze VBA-routine speurt alle afkortingen op, en brengt ze samen in een nieuw document.

Het creëren van een nieuw document gebeurt door de methode Add van de verzameling Documents op te roepen. Dit nieuwe document wijst u toe aan een variabele van het type Document, met de toepasselijke naam AcroniemenLijst. Vervolgens zorgt u ervoor dat de cursor zich in het begin van het actieve document bevindt door de methode HomeKey op te roepen van het Selection-object. Het argument wdStory duidt op de toe te passen eenheid, in casu de hoofdtekst. Zo zou wdLine de cursor naar het begin van de actieve regel brengen.

Vervolgens zorgt u er eerst voor dat er geen ‘residu’ van een eerdere zoek-en-vervangbewerking blijft hangen. Daarna voert een Do While … Loop-lus de nieuwe zoekoperatie evenveel keer uit, totdat de Execute-methode, toegepast op de Find-bewerking van het Selection-object, niet langer True als resultaat oplevert. Dit is het teken dat geen afkortingen meer gevonden zijn. Telkens wordt met een InsertAfter de gevonden tekst overgebracht naar het nieuwe document.

Tenslotte sorteert u het aldus opgebouwde AcroniemenLijst-document. Een Do … Loop Until…-lus doorloopt deze lijst, zolang er paragrafen in aangetroffen worden die identiek zijn aan de voorgaande: element p uit de Paragraphs-collectie wordt vergeleken met element p – 1, en bij gelijkheid doet een Delete-operatie het kuiswerk. Door systematisch na te gaan of Paragraphs.Count niet overschreden wordt, stopt de lus netjes.

Als er maar één afkorting gevonden wordt (= als AcroniemenLijst slechts één paragraaf telt), dan gaat deze routine de mist in. Waarom? En hoe hier een mouw aan passen?

Werkt op: Word 2007, Word 2003 en eerder

4 Reacties op: Word-macro: alle afkortingen uit een tekst halen

  • Om te reageren moet je ingelogd zijn. Nog geen account? Registreer je dan en praat mee!
  • 2 jaren, 5 maanden geleden
    In Word 2010 krijg ik compileer fouten; De afkortingen komen allemaal aan en na elkaar te staan. Bij de foutopsporing gaat het mis bij & en bij de laatste DO THEN ELSE.
    Lijkt me een fijne macro om te gebruiken
    Wanneer je een reactie plaatst ga je akoord
    met onze voorwaarden voor reacties.
  • 10 maanden, 2 weken geleden
    Farmville farms even include free gift that deedcgedakeeebaa
    Wanneer je een reactie plaatst ga je akoord
    met onze voorwaarden voor reacties.
  • 10 maanden, 2 weken geleden
    I think this is among the most significant info for me. And i am glad reading your article. But want to remark on some general things, The website style is wonderful, the articles is really great D. Good job, cheers kfdgdkbcdfgcdfke
    Wanneer je een reactie plaatst ga je akoord
    met onze voorwaarden voor reacties.
  • 10 maanden, 2 weken geleden
    Wonderful beat ! I would like to apprentice while you amend your website, how could i subscribe for a weblog site? The account aided me a appropriate deal. I were tiny bit familiar of this your broadcast provided shiny transparent concept kcdcadcbeeecdead
    Wanneer je een reactie plaatst ga je akoord
    met onze voorwaarden voor reacties.

Wanneer je een reactie plaatst ga je akoord
met onze voorwaarden voor reacties.