Om te beginnen met macro's is dit an sich wel een aardig voorbeeld, want je kunt een groot deel van de noodzakelijke handeling dus wel opnemen. Probeer maar eens. Om te beginnen zou ik, als je dat nog niet gedaan hebt, het tabblad <Ontwikkelaar> aanzetten in het lint, want dat is (in mijn ogen dan) onmisbaar in elke Office applicatie. En die staat dus standaard uit, mafketels bij Microsoft
. Als dat aanstaat, kun je met de knop <Macro opnemen> een macro maken die dus het grootste deel van het werk uitvoert. Wat je moet doen is simpel: selecteer de onderste rij van de tabel (links van de tabel gaan staan met de muis, en klikken) en dan <Ctrl>+<c>, Pijl naar beneden, gevolgd door <Ctrl>+<v>. Kopieer de rij, en plakken. Vervolgens kun je de macro stoppen. Wat de macro doet, is een kopie maken van de rij, inclusief je keuzelijst, en er onder plakken.
Zou je de macro nu gelijk weer uitvoeren, dan krijg je een foutmelding. Dat komt doordat de macro alles heeft opgeslagen,
behalve het selecteren. Een macro kan namelijk geen muishandelingen opslaan. Wil je de macro bekijken, dan druk je op <ALt>+<F11> om de macro te lezen. Dan zie je dit:
Code:
Sub Macro2()
Selection.Copy
Selection.MoveRight Unit:=wdCharacter, Count:=1
Selection.PasteAndFormat (wdListContinueNumbering)
End Sub
Je kunt de macro testen door op <F5> te drukken, of de knop <Sub/Userform uitvoeren>.
Hij begint dus gelijk met het Copy commando, niet met selecteren. Je zult dus eerst een rij moeten selecteren voordat je de macro uitvoert.
Daarnaast weet de macro dus niet wannéér hij wel mag draaien, en wanneer niet. Dus daarvoor moeten we ook nog wat doen. Ik heb dan ook de volgende macro voor je gemaakt:
Code:
Sub mcrCopyRij()
Dim aDoc As Document
Dim objTable As Word.Table
Dim numCol As Integer, numRow As Integer, curTabIdx As Integer
Set aDoc = ActiveDocument
curTabIdx = aDoc.Range(0, Selection.Tables(1).Range.End).Tables.Count
Set objTable = aDoc.Tables(curTabIdx)
numCol = objTable.Columns.Count
numRow = objTable.Rows.Count
With Selection
If .Information(WdInformation.wdWithInTable) = True Then
''If .Cells(1).RowIndex = numRow And .Cells(1).ColumnIndex = numCol Then
If .Cells(1).RowIndex = numRow Then
.Collapse Direction:=wdCollapseStart
.SelectRow
.Copy
.MoveDown Unit:=wdLine, Count:=1
.PasteAndFormat (wdListContinueNumbering)
End If
End If
End With
End Sub
Deze macro is een stuk intelligenter; om te beginnen wordt hij uitgevoerd in de actieve tabel, wat handig is als je meerdere tabellen hebt. Daarnaast kijkt hij of de cursor überhaupt wel in een tabel staat (niet onbelangrijk), en of hij in de
laatste rij staat. Anders wordt er een rij midden in de tabel ingevoegd. Kan de bedoeling zijn, maar ik vermoed van niet. Ik heb een extra optie ingebouwd die nu als commentaar is gemarkeerd (de groene regel) die een check doet op laatste rij + laatste cel. Als je die liever hebt, moet je bij die regel de twee enkele quootjes weghalen, en minstens één quootje zetten voor de volgende regel.
Ook hiervoor geldt: de macro kun je starten met F5. Voor het gemak kun je de macro ook aan een toets toewijzen. In het document heb ik dat gedaan, en hangt de macro aan de knop <F10>. Op die manier is het heel makkelijk om de macro uit te voeren. Kijk maar eens of je het wat vindt.