09. april 2013 - 09:02Der 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.
I dette særtema ser vi på, hvordan cloud og AI bliver fundamentet for virksomhedernes digitale forretning, og hvordan de nye muligheder for automatisering og forretningsværdi kan udnyttes uden at miste overblik, sikkerhed og menneskelig kontrol.
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.
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
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.