Avatar billede LS-Falster Juniormester
07. marts 2013 - 15:02 Der er 6 kommentarer og
1 løsning

Hjælp til en makro til at slette tekstfelt og det afsnit, som tekstfeltet står i

jeg har en brevskabelon, som i forenklet form ser således ud:

"For at opnå en tilladelse skal du opfylde følgende betingelser:"

Du skal fremsende en plantegning(tekstfelt1)
Du skal fremsende en snittegning(tekstfelt2)
Du skal fremsende en situationsplan(tekstfelt3)
Du skal fremsende en energiberegning(tekstfelt4)
Du skal overholde afstandskrav til skel(tekstfelt5)
osv.
-------------------
Er der nogle tekstfelter, som ikke skal bruges, taster man "-", og så slettes tekstfeltet på baggrund af nedenstående makro.

Sub SletTomtFelt1()

  Dim f As FormField
  Set f = ActiveDocument.FormFields("Tekstfelt1")
      If f.Result = "-" Then
        f.Delete
      End If

End Sub

Problemet er bare, at der kommer tomme linjer, der hvor tekstfelterne bliver slettet. Hvordan kan jeg rette makroen, så det undgås?
Avatar billede Lene Fredborg Ekspert
09. marts 2013 - 16:15 #1
Hvis tekstfeltet f er i et selvstændigt afsnit, så udskift linjen

f.Delete

med

f.Range.Paragraphs(1).Range.Delete

Den linje sletter hele det afsnit, som f findes i.
Avatar billede LS-Falster Juniormester
14. marts 2013 - 11:02 #2
Desværre virker det ikke.
Jeg får følgende fejl:
Run-time error '5224': Ugyldig markering

Når jeg så klikker på Debug, markeres den linje, som jeg lige har erstattet, dvs. f.Range.Paragraphs(1).Range.Delete
Avatar billede Lene Fredborg Ekspert
14. marts 2013 - 11:28 #3
Så er dit tekstfelt tilsyneladende ikke i et almindeligt, selvstændigt afsnit, hvilket var sat som forudsætning.

Du er nødt til at forklare præcis, hvor tekstfeltet findes og sammenhængen i øvrigt. Makroen gør ikke noget med markeringen. Du har måske noget i forudgående makroer, som arbejder med Selection.
Avatar billede LS-Falster Juniormester
15. marts 2013 - 09:44 #4
Jeg har prøvet at opbygge et simpelt testdokument, som kun indeholder 2 tekstfelter (formularkontrolelementer). Dokumentet ser således ud:
_ _ _ _ _ _ _ _ _ _ _

Her står en almindelig tekst. (nyt afsnit)
Tekstfelt 1 (nyt afsnit)
Tekstfelt 2 (nyt afsnit)
Her står et andet afsnit med almindelig tekst.
_ _ _ _ _ _ _ _ _ _ _

Jeg arbejder i Word 2010, men selve skabelonen er gemt som Word 97-2003-skabelon. Det kan synes mærkeligt, men alle de skabeloner jeg arbejder med linker op til bogmærker fra et andet program, som ikke kan arbejde i Word 2010. Men i ovenstående eksempel har jeg ingen links til bogmærker for at sikre mig, at det ikke griber forstyrrende ind.
Mine tekstfelter(formularkontrolelementer) er indsat fra fanen Udvikler >> Kontrolelementer >> ældre formularer. 

Makroerne er sat til at blive afspillet ved udgang af tekstfelterne.

Kan man forestille sig, at fejlen opstår, fordi jeg arbejder i Word 2010, men gemmer som en 97-2003 Wordskabelon?
Avatar billede Lene Fredborg Ekspert
15. marts 2013 - 10:27 #5
Når koden afvikles på det tidspunkt, er du nødt til at fjerne beskyttelse først for at slette afsnittet og sætte beskyttelse igen bagefter - men det gør du måske også?

Her er din makro men den ændrede linje + to funktioner, som fjerner beskyttelse. Hvis der skal password på, skal "" erstattes med passwor: "[password]":

Sub SletTomtFelt1()

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

End Sub

Function ProtectForFormFields(oDoc As Document)
    'Slå beskyttelse som formular TIL:

    With oDoc
        If .ProtectionType <> wdAllowOnlyFormFields Then
            .Protect Password:="", NoReset:=True, Type:=wdAllowOnlyFormFields
        End If
    End With
End Function

Function UnprotectForFormFields(oDoc As Document)
    'Slå beskyttelse som formular FRA:

    With oDoc
        If .ProtectionType <> wdNoProtection Then
            .Unprotect Password:=""
        End If
    End With
End Function


Det lyder specielt med det, du forklarer om bogmærkerne, hvis bogmærkerne ikke er placeret i dokumenterne af dig/en anden bruger. Eller er det måske bare bogmærker, der hedder noget med OLELINK? - hvis det er tilfældet, dukker sådanne af og til op i forbindelse med indsættelse af kopieret indhold. De linker ikke til andre dokumenter. Ellers må du have noget kørende i Word, som er årsagen til det, f.eks.: Har du makroer med navnet AutoOpen og/eller AutoNew i Normal.dotm? Har du installeret tilføjelsesprogrammer til Word?

Det med Wrod 97-2003-format har ikke betydning.
Avatar billede LS-Falster Juniormester
20. marts 2013 - 08:24 #6
Hej Lene

Din sidste kode virker lige efter hensigten. Dejligt at du var vedholdende. Det sætter jeg stor pris på.

Du må gerne sende et svar, så du kan få dine point.

Tak for hjælpen.
Avatar billede Lene Fredborg Ekspert
20. marts 2013 - 11:47 #7
Velbekomme. Generelt: man er nødt til at fjerne beskyttelse for at kunne lave ændringer, som påvirker data, der ikke er inde i selve formularfelterne.
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