Avatar billede LS-Falster Juniormester
16. februar 2012 - 16:50 Der er 4 kommentarer og
1 løsning

Optimering af makro til at slette afsnit under et tekstfelt

Hej

Jeg har fået nedenstående kode til at slette et afsnit på baggrund af et bestemt resultat i et tekstfelt. Den skal dog finjusteres, da koden samtidig sletter mit tekstfeltet, og det er ikke meningen

Tekstfeltet skal beholdes, så det kun er afsnittene nedenunder, der slettes. Hvad skal der ændres?


Sub SletAfsnit()

Dim oField As FormField
    Dim oDoc As Document
    Dim oRange As Range
 
    Set oDoc = ActiveDocument
    For Each oField In oDoc.Range.FormFields
        If oField.Result = "Der er ikke givet dispensation." Then
            Set oRange = oField.Range.Paragraphs(1).Range
            'Extend range to include 6 next paragraphs
            If oRange.MoveEnd(UNIT:=wdParagraph, Count:=4) <> 0 Then
                oRange.Delete
            Else
                'MoveEnd returns 0 if less than 4 paragraphs are found after paragraph with field
                'Insert code here if something is going to happen in case less than 2 paragraphs were found
            End If
        End If
    Next oField
 
    Set oDoc = Nothing

End Sub

Mvh Lars
Avatar billede Lene Fredborg Ekspert
16. februar 2012 - 17:45 #1
Du kan f.eks. indsætte følgende linje FØR linjen med "oRange.Delete":

oRange.MoveStart unit:=wdParagraph, Count:=1

Koden flytter starten af oRange til starten af næste afsnit.

NB I kommentaren i koden står der "6 next paragraphs" (måske et levn fra noget, jeg engang lavede ...). Det er kun 4 afsnit.
Avatar billede LS-Falster Juniormester
17. februar 2012 - 12:04 #2
Hej Lene

Fint, så virker det, så du må gerne sende et svar.

Er det i øvrigt meget besværligt at omskrive makroen, da jeg i dette tilfælde kun har en FormField, som hedder "Der er ikke givet dispensation." Det irriterer mig nemlig, at koden gennemsøger hele dokumentet, selvom der kun er den ene FormField, som hedder "Der er ikke givet dispensation."

Under alle omstændigheder tak for hjælpen. Du er virkelig en "haj" på dit område.

Mvh Lars
Avatar billede Lene Fredborg Ekspert
17. februar 2012 - 12:43 #3
Velbekomme.
Du kan indsætte:
Exit For
lige efter linjen
oRange.Delete

Så bliver der ikke søgt mere, da det får koden til at hoppe ud af løkken. Det princip kan du generelt benytte til at stoppe, når du har opnået det, du ville.
Avatar billede LS-Falster Juniormester
07. marts 2013 - 15:25 #4
Hej Lene

Jeg har aldrig fået et svar fra dig på ovenstående spørgsmål, selvom du har løst mit problem.
Avatar billede Lene Fredborg Ekspert
08. marts 2013 - 01:02 #5
Svar kommer her.
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Tag et kursus i Word og øg effektiviteten

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester