Word-macro: alle afbeeldingen ineens aanpassen

Stel: na een Word-document doorspekt te hebben met een honderdtal afbeeldingen, realiseert u zich plotseling dat elke afbeelding eigenlijk een beetje kleiner zou moeten worden. Het vooruitzicht om dan honderd keer op een afbeelding te klikken, telkens de opmaakdialoog op te roepen en een schaalpercentage aan te passen, lijkt weinig boeiend. Gelukkig zijn er macro’s.

Het actieve Word-document is een VBA-object met de toepasselijke naam ActiveDocument. De afbeeldingen in dit document kunnen ofwel meevloeien met de tekst, ofwel er los boven zweven. In het eerste geval spreekt men van Inline shapes, het tweede geval wordt aangeduid als Shapes. Voor Word gaat het hier om twee verschillende soorten objecten, dus dienen ze apart behandeld te worden.

Zowel het zwevende als het vaste plaatje kennen de eigenschap ScaleHeight en ScaleWidth: percentages waarmee respectievelijk de hoogte en de breedte van de afbeelding dienen aangepast te worden. Ze stemmen overeen met de waarden die instelbaar zijn in het dialoogvenster achter de optie Grootte (Word 2007) of Afbeelding opmaken (Word 2003) in het contextmenu van een geselecteerde afbeelding.

© PXimport

De grootte van een afbeelding aanpassen, gebeurt via de schaalwaarden in de groottedialoog van Word 2007.

© PXimport

In Word 2003 steken de vormgevingswaarden van een afbeelding achter de dialoog Afbeelding opmaken.

Het ActiveDocument-object beschikt (ondermeer) over twee verzamelingen - Collections in VBA-jargon. Eentje groepeert alle Inline shapes, en kreeg daarom het voor de handliggende etiket InlineShapes opgekleefd. De andere refereert naar alle zwevende afbeeldingen, en heet kortweg Shapes.

Een krachtige lus in VBA is: For Each [element] In [een verzameling] … Next. Deze lus doorloopt alle exemplaren van een verzameling zonder dat het precieze aantal dient gekend te zijn, en past daarop telkens de instructies die deel uitmaken van de lus toe. U dient enkel een soort lopend exemplaar van het gepaste type te definiëren, dat door die instructies opgeroepen en gemanipuleerd kan worden. Welk type dit moet zijn, wordt bepaald door de aard van de verzameling.

Het volstaat nu een en ander samen te gieten in een VBA subroutine, en de geautomatiseerde aanpassing van alle afbeeldingen is een feit. In het voorbeeld hieronder gaat het om een verkleining tot 90% van de actuele grootte, en dit zowel in de hoogte als in de breedte.

Roep daartoe de VBA-editor op (Alt+F11), dubbelklik op het object ThisDocument in de Projectverkenner (Ctrl+R), en vul volgende code in (u kunt deze code ook knippen en plakken):

[code]Public Sub AllePlaatjesAanpassen()

Dim TekstPlaatje As InlineShape

For Each TekstPlaatje In ActiveDocument.InlineShapes

With TekstPlaatje

.ScaleHeight = 90

.ScaleWidth = 90

End With

Next TekstPlaatje

Dim ZwevendPlaatje As Shape

For Each ZwevendPlaatje In ActiveDocument.Shapes

With ZwevendPlaatje

.ScaleHeight Factor:=(90 / 100), RelativeToOriginalSize:=msoCTrue

.ScaleWidth Factor:=(90 / 100), RelativeToOriginalSize:=msoCTrue

End With

Next ZwevendPlaatje

End Sub[/code]

© PXimport

Ons CMS ondersteunt geen kleur in scriptcode, dus hier een voorbeeld van hoe de code er in de VBA-editor eruit zou komen te zien.

Ten eerste is de subroutine publiek gemaakt: de Sub-instructie wordt voorafgegaan door Public. Hierdoor komt AllePlaatjesAanpassen later beschikbaar (en dus uitvoerbaar) als in het Word-document op Alt+F8 gedrukt wordt.

TekstPlaatje en ZwevendPlaatje zijn zelfbedachte, voor zich sprekende benamingen voor de twee lusvariabelen: de in de twee lussen te behandelen exemplaren van beide betrokken verzamelingen.

Voor de rest hebt u er alle belang bij IntelliSense maximaal zijn ding te laten doen. Op die manier is het eenvoudig om InlineShapes of Shapes te selecteren uit de lijst die het puntje na ActiveDocument te voorschijn laat komen. Even eenvoudig als het kiezen van InlineShape en Shape uit de opties die de spatie na de As doet verschijnen op de Dim-regels. En de With … End With-constructies vermijden van telkens opnieuw respectievelijk TekstPlaatje en ZwevendPlaatje te moeten herhalen.

Werkt op: Word 2007, Word 2003 en eerder

Deel dit artikel
Voeg toe aan favorieten