Avatar billede LS-Falster Juniormester
12. januar 2012 - 10:09 Der er 15 kommentarer og
1 løsning

Slet tomt tekstfelt i Word

Hej

Jeg har indsat et tekstfelt i en skabelon i Word, som jeg har kaldt "Indtast_supplerende_adresse".

Hvis brugeren af skabelonen ikke ikke har supplerende adresseoplysninger, ønsker jeg, at dette tekstfelt slettes vha. en makro.

Mvh Lars
Avatar billede supertekst Ekspert
12. januar 2012 - 11:00 #1
Er det sådan at bruger indtaster data via en userform?
Avatar billede LS-Falster Juniormester
12. januar 2012 - 11:24 #2
Nej, det er bare et tekstfelt (text Formfield) i formular.
Avatar billede tjp Mester
12. januar 2012 - 11:49 #3
Kan det her bruges?:

Sub SletIkkeUdfyldtSuppAdr()
  Dim f As ContentControl
  For Each f In ThisDocument.ContentControls
    If f.Title = "Indtast_supplerende_adresse" And (f.Range.Text) = f.PlaceholderText Then
      f.Delete
    End If
  Next
End Sub
Avatar billede Lene Fredborg Ekspert
12. januar 2012 - 13:56 #4
Supertekst: ContentControls og FormFields er to forskellige ting. Derfor vil makroen ikke virke.

Lars:
Et opklarende spørgsmål: Længden af navnet "Indtast_supplerende_adresse" tyder på, at du ikke navngiver FormFields ved at benytte egenskaberne for felterne (åbn f.eks. dialogboks med egenskaber ved at dobbeltklikke på et FormField). Der kan du give feltet et bogmærkenavn, men længden er begrænset til 20 tegn mens bogmærker oprettet via dialogboksen Bogmærke kan have 40 tegn. Er "Indtast_supplerende_adresse" navnet på et bogmærke, du har oprettet via dialogboksen Bogmærke? Det har betydning for, hvordan makroen til sletning skal se ud.

NB Det er enklere og mere sikkert at navngive FormFields via de tilhørende egenskaber, for så kan du f.eks. ikke komme til at slette et "løstgående" bogmærke af vanvare.
Avatar billede supertekst Ekspert
12. januar 2012 - 14:06 #5
Hej Lene - det er nu ikke mig..
Avatar billede Lene Fredborg Ekspert
12. januar 2012 - 14:23 #6
Hej supertekst. Undskyld - det var en fejl fra min side (ren tanketorsk fordi jeg lige have læst Lars's andet spørgsmål).
Avatar billede supertekst Ekspert
12. januar 2012 - 14:41 #7
Alt tilgivet...
Avatar billede LS-Falster Juniormester
12. januar 2012 - 14:53 #8
Hej tjp

Der kommer desværre en fejlmeddelelse:
Compile error: User-defined type not defined.
Avatar billede LS-Falster Juniormester
12. januar 2012 - 14:58 #9
Hej Lene

Det er et Formfield, og du har selvfølgelig ret mht. længden af bogmærket i Formfield-"boksen". Jeg havde bare benyttet det lange bogmærkenavn som et eksempel. Det har jeg nu omdøbt til "Supplerende-adresse".
Avatar billede tjp Mester
12. januar 2012 - 16:21 #10
I stand corrected... havde ikke lige tjekket under 'Ældre funktioner', da jeg ikke ku finde noget der lignede et tekstfelt under Indsæt >> Hurtige dele >> Felt... :-)

Hos mig brokker den sig altså over bindestreg, så jeg har valgt at bruge "Supplerende_adresse" med understreg.

Men måske denne virker bedre:

Sub SletIkkeUdfyldtSuppAdr()
  Dim f As FormField
  For Each f In ThisDocument.FormFields
    If f.Type = 70 Then
      If f.Name = "Supplerende_adresse" _
          And (f.TextInput.Default = f.Result Or Trim(f.Result) = "") Then
        f.Delete
      End If
    End If
  Next
End Sub
Avatar billede LS-Falster Juniormester
13. januar 2012 - 10:17 #11
Hej igen

Den virker og så alligevel ikke. Når jeg kører makroen direkte fra min skabelon, så fungerer det fint. Når jeg så kører makroen fra en kopi af skabelonen, virker den ikke. Jeg har både lagt makroen i et module, i This Document og både i selve skabelonen og også i normal.dot skabelonen. Men det virker så bare ikke, så snart jeg får en kopi af skabelonen?????
Avatar billede tjp Mester
13. januar 2012 - 10:21 #12
Prøv at ændre 'ThisDocument' til 'ActiveDocument'..
Avatar billede LS-Falster Juniormester
13. januar 2012 - 11:53 #13
Super! Det var lige det, som manglede. Det er så enkelt, når bare man ved det.

Jeg takker mange gange for hjælpen.
Så hvis du smider et svar, får du dine velfortjente point.

Mvh Lars
Avatar billede tjp Mester
13. januar 2012 - 12:20 #14
Bør deles med Lene... :-)
Avatar billede Lene Fredborg Ekspert
13. januar 2012 - 12:29 #15
tjp: Det er ikke nødvendigt :-)

Lars:
Info, som kan være til hjælp:
ThisDocument refererer altid til det dokument, som makroerne findes i.
ActiveDocument er det dokument, der er fremme på skærmen i Word. Hvis man laver makroer, som hopper rundt i flere dokumenter, er det risikabelt at benytte ActiveDocument, for det kan jo være, at det ikke længere er det rigtige dokument. Så bør man i stedet lave en variabel som f.eks. her:
Dim oDoc as Document
og på det første tidspunkt, hvor man er sikker på, at ActiveDocument er det rigtige dokument:
Set oDoc = ActiveDocument
Derefter kan man bruge oDoc, når der skal ske noget med det dokument (f.eks. i eksemplet her: For Each f In oDoc.FormFields). Man kan på den måde have flere dokumenter i spil med hver sin entydige reference, og man er altid sikker på at have fat i det rigtige dokument.
Avatar billede tjp Mester
13. januar 2012 - 13:11 #16
Thx :-)
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