Avatar billede LS-Falster Juniormester
09. april 2013 - 09:02 Der er 3 kommentarer og
1 løsning

Makro til at slette flere afsnit som indeholder tekstfelter

Jeg har et dokument, som er opbygget nogenlunde således:

Overskrift 1 (tekstfelt)
Afsnit 1 med tekst (tekstfelt)
Afsnit 2 med tekst (tekstfelt)
Afsnit 3 med tekst (tekstfelt)

Når jeg trykker - (minus), så slettes de enkelte felter, og brugeren har så mulighed for at fravælge den tekst, som ikke skal med i dokumentet. Men jeg er interesseret i, at man også kan slette overskrift 1 og alle afsnit på en gang, hvis man trykker minus i overskriften.

Jeg har brugt følgende makro til at slette felterne med:
Sub SletTomtFelt1()

  Dim f As FormField
  Set f = ActiveDocument.FormFields("Tekst1")
      If f.Result = "-" Then
        'fjern bestkyttlse
        UnprotectForFormFields ActiveDocument
        f.Range.Paragraphs(1).Range.Delete
        'beskyt igen
        ProtectForFormFields ActiveDocument
      End If

End Sub

Jeg har efterfølgende prøvet at ændre tallet i f.Range.Paragraphs til 4, men så kommer der en fejlmeddelelse.
Avatar billede Lene Fredborg Ekspert
09. april 2013 - 10:08 #1
Er overskrifterne og de tilhørende felter i en tabelcelle?
Hvis ikke, er overskriften formateret med typografien Overskrift 1. Hvis ikke, hvilke kendetegn er er så på overskriften.

Når du skriver 4 i stedet for 1, prøver du at slette 4. afsnit i det afsnit, som feltet er i, og et sådant afsnit findes jo i sagens natur ikke - derfor får du fejl.
Avatar billede Lene Fredborg Ekspert
09. april 2013 - 10:17 #2
Se bort fra mine spørgsmål ovenfor. Jeg kan se, at du kun vil slette alle afsnit, hvis du er i overskriften.

Du kan gøre sådan - og makroen skal kun knyttes til felter i overskrifter:

Sub SletTomtFeltInkl3AfsnitEfter()

    Dim f As FormField
    Dim rngParas As Range
 
    Set f = ActiveDocument.FormFields("Tekst1")
   
    If f.Result = "-" Then
      'fjern bestkyttlse
      UnprotectForFormFields ActiveDocument
      'definer range, som indeholder afsnit m. felt + 3 næste afsnit
      Set rngParas = f.Range.Paragraphs(1).Range
      rngParas.MoveEnd unit:=wdParagraph, Count:=3
      rngParas.Delete
      'beskyt igen
      ProtectForFormFields ActiveDocument
    End If

    Set f = Nothing
    Set rngParas = Nothing

End Sub
Avatar billede LS-Falster Juniormester
09. april 2013 - 11:05 #3
Hej Lene

Du har som altid en løsning på mit konkrete problem. Det virker lige efter hensigten.
Send et svar og du skal få dine point.

Mange tak for hjælpen.
Avatar billede Lene Fredborg Ekspert
09. april 2013 - 11:31 #4
Velbekomme.
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