Avatar billede OleRasmussen Nybegynder
04. juli 2014 - 12:03 Der er 9 kommentarer og
1 løsning

Sidetal på flettebreve i Word

Hej,

Jeg har et lidt irriterende problem i Word. Har oprettet diverse flettebreve med sidetal placeret i header/footer. Problemet er,  kort fortalt, at disse sidetal "fortsættes" når der flettes. Lidt af et problem, når der er ca. 250 modtagere :-)

Jeg har lavet en makro, der laver den automatiske sidenummerering om til ren tekst, så denne kunne jo køres inden der flettes - MEN makroen får kun fat i sidetal, hvis de er placeret på selve siden, ikke i header/footer...Denne makro blev oprindelig oprettet fordi jeg gerne ville "afkode" datofeltet, således af det også blev til ren tekst og således ikke blev opdateret, næste gang dokumentet blev åbnet.

Kan man placere sidetallene "på siden" låst, så deres placering ikke påvirkes af ny tekst? Kan man lave en makro der også får fat i tekst i header/footer? Kan det i virkeligheden gøres meget smartere? :-)

Jeg ville være meget taknemmelig for gode forslag!

Mvh
Ole Rasmussen
Avatar billede OleRasmussen Nybegynder
04. juli 2014 - 12:05 #1
Makroen er:

Sub Unlink_genvej()
    Dim oStory As Range
   
    'Hvert område i et dokument er en 'Story'
    'Gennemløb alle stories og opdater felter deri
    For Each oStory In ActiveDocument.StoryRanges
        oStory.Fields.Update
        If oStory.StoryType <> wdMainTextStory Then
            While Not (oStory.NextStoryRange Is Nothing)
                Set oStory = oStory.NextStoryRange
                oStory.Fields.Unlink
            Wend
        End If
    Next oStory
   
    'Ryd op
    Set oStory = Nothing
End Sub
Avatar billede Lene Fredborg Ekspert
04. juli 2014 - 14:04 #2
Hvilken type felt er det, du har indsat - er det { Page }? Så burde det selv starte forfra. Men hvis du også har { NumPages } (viser samlet antal sider), vil det være fortløbende.

Det ser ud til, at den makro, du har vist, stammer fra mig. Men den er til et andet formål.

Sidehoved og -fod hører til sektioner, og derfor skal en makro til dette behandle sektioner. Desuden findes der hele tre forskellige sidehoveder og -fødder pr. sektion, og de kan alle være i brug, hvis der er forskellig første side og forskellig lige/ulige sider.

Følgende makroer ændrer alle felter i enten hoved eller fod til alm. tekst - brug den relevante af dem, inden du fletter. Hvis hoved/fod indeholder andre typer felter, som skal opdateres med data fra datakilden, skal der mere med i makroen, så det kun er de rigtige felter, der ændres - men jeg regner ikke med, at det er tilfældet her.

Hvis felter er i sidehoved:

Sub UnlinkAllHeaderFields()
    Dim oSec As Section
   
    For Each oSec In ActiveDocument.Sections
        oSec.Headers(wdHeaderFooterFirstPage).Range.Fields.Unlink
        oSec.Headers(wdHeaderFooterPrimary).Range.Fields.Unlink
        oSec.Headers(wdHeaderFooterEvenPages).Range.Fields.Unlink
    Next oSec
       
End Sub

Hvis felter er i sidefod:

Sub UnlinkAllFooterFields()
    Dim oSec As Section
   
    For Each oSec In ActiveDocument.Sections
        oSec.Footers(wdHeaderFooterFirstPage).Range.Fields.Unlink
        oSec.Footers(wdHeaderFooterPrimary).Range.Fields.Unlink
        oSec.Footers(wdHeaderFooterEvenPages).Range.Fields.Unlink
    Next oSec
       
End Sub
Avatar billede OleRasmussen Nybegynder
04. juli 2014 - 15:04 #3
Hej igen,

Først vil jeg sige, at jeg er dybt imponeret af din viden!

Din (gamle) makro virker rigtig fint mht. at unlinke datofeltet, selvom den så er tiltænkt anden funktion.

Efter hvad jeg kan se, er sidenummereringen {Page} - det er jeg sikker på.

Der er særlig baggrund på forsiden - og samme baggrund på alle efterfølgende sider. Dvs. jeg har brugt "Speciel første side". De felter der skal unlinkes er "bare":
I header: {page}
På "selve siden": {date}
....så det vil vel sige, jeg skal bruge en makro, der når begge disse, altså header og "siden" (men "siden" er måske altid inkluderet...?)

Du ANER ikke, hvor lang tid jeg har brugt på dette dokument, så hvis du kan løse det, er du dagens helt! Jeg må prøve at indsætte din makro.

Mange tak for svaret!!

Mvh Ole
Avatar billede Lene Fredborg Ekspert
04. juli 2014 - 15:32 #4
Velbekomme.

Du kan se koden inde i felter ved at taste Alt+F9 (skifter mellem at vise feltresultater og feltkoder).

Jeg gætter på, at grunden til, at du vil ændre datofeltet er, at det ellers opdateres til dags dato. Hvis det er korrekt, har du ikke brugt en hensigtsmæssig type datoflet til formålet. I stedet for at ændre feltet til alm. tekst, var det måske en ide at ændre felttypen i stedet. Se denne artikel på min blog:
http://www.thedoctools.com/wordtips/dato-aendres-naar-word-dokument-aabnes/

Nej, "siden" er ikke automatisk inkluderet i det, makroerne til hoved/fod udfører. De to makroer behandler kun indhold i henholdsvis hoved og fod.

Hvis du ønsker at ændre datofeltet til almindelig tekst, og hvis datofeltet f.eks.er første felt på siden, kan du føje følgende linje til makroen UnlinkAllHeaderFields - kan indsættes lige før linjen "End Sub". Så vil første felt i dokumentets hovedindhold blive ændret til alm. tekst. Men hvis det ikke er første felt, skal koden ændres.

    ActiveDocument.Range.Fields(1).Unlink

NB Du bør ikke selv oprette svar men kun oprette kommentarer, medmindre du selv reelt svarer på dit eget spørgsmål. Du kan finde vejledning her: http://www.eksperten.dk/faq
Avatar billede OleRasmussen Nybegynder
04. juli 2014 - 21:59 #5
Hej igen,

Sorry, hvis jeg gør klumrer rundt mellem kommentarer og svar....:)

Grunden til, jeg har brugt {date} til datofeltet er, at det skal opdatere, når dokumentet (som fungerer som een ud af mange lignende templates) åbnes og redigeres. Jeg kunne ikke bruge "createdate", da denne jo ville vise dokumentets oprindelsesdato. Kunne helle Ikke finde andre brugbare felttyper. printdate og savedate er jo heller ikke lige løsningen :)

Planen er, at man åbner templaten, evt. ny tekst tilføjes, dato (og sidetal) opdaterer på normal vis, MEN næste step er så:
1) der skal flettes uden opsummering af sidetal
2) dokumentet journaliseres under nyt navn/placering og datofeltet skal afkodes, således at det ikke opdateres, hvis man genåbner dette jornaliserede dokument.

Den oprindelige template skal således beholde alle koder.

Jeg siger igen mange tak for din hjælp - jeg vil glæde mig til at afprøve dine tips. Nu skal jeg bare finde ud af pointsystemet herinde - ja, har haft en meget stresset dag :) - for du fortjener en belønning!
Avatar billede Lene Fredborg Ekspert
04. juli 2014 - 23:42 #6
(Dette er lavet som et svar - det giver dig mulighed for at tildele point)

Hvis I bruger templates (skabeloner), som de er designet til at blive brugt, er CreateDate den rigtige type felt at bruge til dato.

Det er ikke meningen, at man skal åbne en template, når den skal bruges til et nyt dokument - kun når man skal redigere selve templaten. Man skal i stedet oprette et nyt dokument baseret på templaten. I Word 2010 kan det f.eks. gøres sådan: File > New > New from Existing > vælg den relevante template (hvis dansk version: Filer > Ny > Ny ud fra eksisterende). Så bliver der oprettet et nyt dokument, der som udgangspunkt er en tro kopi at templaten, og CreateDate opdateres automatisk til dags dato, og den forbliver uændret, når dokumentet åbnes igen.

Se evt. artiklen "Hvad arver et Word-dokument fra den tilknyttede Word-skabelon?", http://www.thedoctools.com/wordtips/hvad-arver-et-word-dokument-fra-den-tilknyttede-skabelon/
Avatar billede Lene Fredborg Ekspert
04. juli 2014 - 23:57 #7
Hov, jeg fik alligevel ikke klikket på svar i forrige post.
Avatar billede OleRasmussen Nybegynder
05. juli 2014 - 00:42 #8
Hej Lene,

Håber det er lykkedes mig at give dig point :)

Med "templates" mente jeg bare hjemmelavede templates :) Det, der skal ske er, at disse åbnes, redigeres, flettes, printes og så gemmes under nyt navn - med deaktiverede koder. Tak for infoen omkring rigtige templates; det var måske nemmest, hvis jeg var gået den vej fra start...:)

Mvh Ole
Avatar billede OleRasmussen Nybegynder
07. juli 2014 - 17:51 #9
Hej igen :-)

Så har jeg nået at teste din makro, og den virker superfint - det eneste er bare, at jeg glemte at fortælle, at jeg har dato og sidetal stående i tekstbokse. Årsagen til det, er, at disse værdier IKKE må flytte sig i takt med, der bliver ændret på tekst på "siden".

Jeg kan se, makroen virker fint, men altså kun på felter der ikke er placeret i tekstbokse...Skal jeg så have fat i noget "oStory" eller? Jeg kan godt oprette et nyt spørgsmål, hvis det er mere korrekt? :-)


Med venlig hilsen
Ole Rasmussen
Avatar billede Lene Fredborg Ekspert
07. juli 2014 - 20:32 #10
Hvis der kun er en tekstboks, så prøv at udskifte linjen
    ActiveDocument.Range.Fields(1).Unlink
med
        ActiveDocument.Range.ShapeRange(1).TextFrame.TextRange.Fields.Unlink

Hvis det ikke er første tekstboks, skal 1-tallet ændres til det rigtige nr.
Du kan også have andre ting i opsætningen som betyder, at linjen vil fejle.
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

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