I mit svar #1 havde jeg navngivet variabler ”Col” for column/kolonne – burde have været ”Row”. Men det har ikke nogen praktisk betydning. Du kan stadig bruge ideen.
Jeg vil ikke gå i detaljer med din kode, da den udgør en løsrevet del af noget, du har lavet. Men her er nogle generelle tips:
Hvis brugerne selv kan foretage sig noget i dokumentet med alle rækkerne, kan du ikke sætte din lid til, at teksten er formateret på en bestemt måde. Brugerne kan måske have ændret noget, medmindre dokumentet er beskyttet på en eller anden måde.
Det ser ud til, at en del af din kode er baseret på noget du har optaget i en makro. Det bliver aldrig specielt elegant på den måde.
Bemærk, at din kode til Bold/Italic vil slå Bold/Italic FRA, hvis teksten allerede er Bold/Italic, da du bruger wdToggle. Brug True i stedet.
I stedet for fysisk at flytte Selection rundt i dokumenterne, ville det være langt bedre at bruge Range. Du kan f.eks. få kopiere indholdet i celle 1 i række 8 i første tabel i dokumentet med kode som denne (kan i praksis gøres mere elegant end vist her):
Dim rngText As Range
Set rngText = ActiveDocument.Tables(1).Cell(8, 1).Range
'excl. end of cell
With rngText
.End = .End - 1
'kopier teksten
.Copy
End With
'Så kan det kopierede indsættes der, hvor du skal bruge det
Hvis du har i sinde at arbejde mere med VBA, er det en god idé at bruge tid på at forstå Range-objektet. Lidt info om Range:
https://msdn.microsoft.com/en-us/vba/word-vba/articles/working-with-range-objectsJeg vil stærkt anbefale, at du i Visual Basic Editor vælger Tools > Options > fanen Editor > Slå ” Require Variable Declaration” til > OK. Så vil nye kodemoduler automatisk få indsat ”Option Explicit” (uden gåseøjne) øverst, og det tvinger dig til at deklarere de variabler, du bruger. Indsæt manuelt ”Option Explicit” i eksisterende moduler. Du kan undgå mange fejl i koden på den måde.