02. januar 2010 - 18:25Der er
4 kommentarer og 1 løsning
Makro til fjernelse af bestemte linjer i Word
Jeg har følgende problem: Jeg modtager data fra en database som Word-dokument, hvor hver post i db er opstillet som vist nedenfor. Jeg har imidlertid brug for, at ændre opstillingen for at kunne importere det i et andet program.
Kunsten er nu at få Word-dokumentet ændret, så hver post ser ud som følger:
1 Snit: Variabel5 Beskrivelse: Variabel6
2 Snit: Variabel5 Beskrivelse: Variabel6
Det er lykkedes at lave en simpel lille makro der udfører en række søg og erstat sekvenser, det går fint når jeg bare skal søge efter linjeskift, dobbelt linjeskift og semikolon, men problemet er at få anden linje i hver post slettet (Variabel1, Variabel2, Variabel3). Formateringen (fx linjeskift) er som vist i eksemplerne.
Et par spørgsmål for at finde den enkleste måde at klare det på: Er der to linjeskift, hver gang en ny post starter - og ingen andre steder? Består hver post af præcis 3 afsnit? Starter post 1 som første afsnit i dokumentet?
Under de givne forudsætninger og under forudsætning af, at "afsnittene" virkelig er afsnit - afsluttet med afsnitstegn - bør du kunne køre nedenstående kode før den kode, du selv har skrevet. Makroen starter med 2. afsnit i dokumentet sletter det. Derefter slettes til slutningen af dokumentet er nået nr. 3 efterfølgende afsnit (hver post indeholder reelt 4 afsnit inkl. det tomme afsnit imellem, men da 2 afsnit lige er slettet fra den behandlede post, er det 3. efterfølgende afsnit, der skal slettes):
Sub DeleteParagraph2FromEachRecord() Dim n As Long
With ActiveDocument For n = 2 To .Paragraphs.Count Step 3 'Der slettes løbende afnit - stop når enden af dokument er overskredet If n > .Paragraphs.Count Then Exit For .Paragraphs(n).Range.Delete Next n End With End Sub
Det kunne gøres på andre måder også… Jeg har jo ikke set din kode, så jeg kan ikke vide, om der kan "rationeres" i det, der laves deri. Bemærk, at makroen ovenfor ikke på noget tidspunkt ændrer på Selection.
Endnu en stor tak det virker fint :-) Som du kan se nedenfor bruges der to kodesystemer. Det virker og er vel ikke noget problem? Send dit svar og de skal få dine velfortjente point.
Sub KlargørDokument() Dim n As Long
With ActiveDocument For n = 2 To .Paragraphs.Count Step 3 'Der slettes løbende afnit - stop når enden af dokument er overskredet If n > .Paragraphs.Count Then Exit For .Paragraphs(n).Range.Delete Next n End With
Dejligt at det virker hos dig. Når din kode virker, som den skal, så kan du fint lade den være.
Et tip, som du måske kan bruge på sigt: Generelt kan det være en god idé så vidt muligt at bruge "Range" i stedet for "Selection". Koden vil normalt køre hurtigere, og man undgår problemer med at holde styr på, at der hele tiden ændres på, hvad der er "selected" i dokumentet. Det kan dog tage noget tid at lære at forstå, hvordan man bruger Range.
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.