Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

[Word] Voetteksten koppelen

Pagina: 1
Acties:

  • Adelbert
  • Registratie: Januari 2007
  • Laatst online: 27-01-2021
Hallo,

Ik heb een probleem met voetteksten. Uit een programma wordt een word document gegenereerd met verschillende secties. Nu heeft de eerste sectie de goede voettekst en de andere 2 een standaard die het programma mee geeft.

Ik weet dat het mogelijk is om de voetteksten te koppelen, maar dit zou eigenlijk automatisch moeten gaan met een macro. Ik ben al aan het zoeken geweest maar tot zover niets kunnen vinden jammer genoeg.

Zou iemand mij een schop in de goede richting kunnen geven.

  • F_J_K
  • Registratie: Juni 2001
  • Niet online

F_J_K

Moderator CSA/PB

Front verplichte underscores

Zou iemand mij een schop in de goede richting kunnen geven.
Extra -> macro -> macro opnemen -> doe je ding -> druk op stop -> alt-F11 -> bekijk de code en schoon het op.

:P

.LinkToPrevious = True dus, met evt. nog een loopje om alle secties langs te gaan.

'Multiple exclamation marks,' he went on, shaking his head, 'are a sure sign of a diseased mind' (Terry Pratchett, Eric)


  • Adelbert
  • Registratie: Januari 2007
  • Laatst online: 27-01-2021
Dat had ik natuurlijk al gedaan en er kwam dit uit:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
Sub voet()
'
' voet Macro
' Macro opgenomen op 3/4/2008 door ...
'
    If ActiveWindow.View.SplitSpecial <> wdPaneNone Then
        ActiveWindow.Panes(2).Close
    End If
    If ActiveWindow.ActivePane.View.Type = wdNormalView Or ActiveWindow. _
        ActivePane.View.Type = wdOutlineView Then
        ActiveWindow.ActivePane.View.Type = wdPrintView
    End If
    ActiveWindow.ActivePane.View.SeekView = wdSeekCurrentPageHeader
    Selection.HeaderFooter.LinkToPrevious = Not Selection.HeaderFooter. _
        LinkToPrevious
    If Selection.HeaderFooter.IsHeader = True Then
        ActiveWindow.ActivePane.View.SeekView = wdSeekCurrentPageFooter
    Else
        ActiveWindow.ActivePane.View.SeekView = wdSeekCurrentPageHeader
    End If
    Selection.HeaderFooter.LinkToPrevious = Not Selection.HeaderFooter. _
        LinkToPrevious
    ActiveWindow.ActivePane.View.SeekView = wdSeekMainDocument
End Sub


Maar dat werkt niet.

edit:

Het was makkelijker dan ik dacht.

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Sub bjabla()
With ActiveDocument.Sections(3)
    With .Footers(wdHeaderFooterPrimary)
        .LinkToPrevious = True
    End With
    With .Footers(wdHeaderFooterPrimary)
        .LinkToPrevious = True
    End With
End With
With ActiveDocument.Sections(4)
    With .Footers(wdHeaderFooterPrimary)
        .LinkToPrevious = True
    End With
    With .Footers(wdHeaderFooterPrimary)
        .LinkToPrevious = True
    End With
End With
End Sub


Toch bedankt!

[ Voor 20% gewijzigd door Adelbert op 04-03-2008 12:10 ]


  • Adelbert
  • Registratie: Januari 2007
  • Laatst online: 27-01-2021
Ik heb toch nog een aansluitende vraag. De documenten waar ik dit op toepas hebben niet altijd evenveel sections. Dus als ik het bovenstaande vb gebruik en het document heeft maar 3 secties dan krijg ik een foutmelding.

Hoe is dit op te lossen?

  • F_J_K
  • Registratie: Juni 2001
  • Niet online

F_J_K

Moderator CSA/PB

Front verplichte underscores

Zoals ik zei wil je dus een loopje gebruiken afhankelijk van het aantal secties; of simpelweg FOR EACH gebruiken (als meer dan 1 sectie).

Overigens wil je afhankelijk van wat je wilt trouwens juist achteraan beginnen.

'Multiple exclamation marks,' he went on, shaking his head, 'are a sure sign of a diseased mind' (Terry Pratchett, Eric)


  • Adelbert
  • Registratie: Januari 2007
  • Laatst online: 27-01-2021
Ik ben al aan het zoeken en ik denk wel redelijk in de goede richting te zitten maar hier houd het een beetje op:

code:
1
2
3
4
5
6
7
8
Sub footers()
For Each Section In ActiveDocument
    With activedocument.Sections()
    .footers (wdHeaderFooterPrimary)
    .LinkToPrevious = True
    End With
Next Section
End Sub

  • F_J_K
  • Registratie: Juni 2001
  • Niet online

F_J_K

Moderator CSA/PB

Front verplichte underscores

For Each Section In ActiveDocument
Weet je zeker dat je de syntax goed hebt?
For Each sectie In ActiveDocument.Sections
sectie.headers(###).linktoprevious = true
###
En zoals gezegd wil je op de volgorde van het linken passen.

Edit: dat is natuurlijk pseudocode en maar half af. En ik bedenk me dat ik alleen header pak, maar dat is natuurlijk eenvoudig naar bijv. footer te vertalen.

[ Voor 24% gewijzigd door F_J_K op 06-03-2008 13:16 ]

'Multiple exclamation marks,' he went on, shaking his head, 'are a sure sign of a diseased mind' (Terry Pratchett, Eric)


  • Adelbert
  • Registratie: Januari 2007
  • Laatst online: 27-01-2021
Ik snap dat de code nog aangevuld moet worden maat dit zou toch voldoende moeten zijn?

code:
1
2
3
4
5
Sub voettekst2()
For Each Sectie In ActiveDocument.Sections
Sectie.footers(?).LinkToPrevious = True
Next Sectie
End Sub


Bij de sectie.footers neem ik aan dat daar een sectie aangegeven moet worden? Als dit het geval is dan ben je toch nog steeds afhankelijk van het aantal secties?

  • Lustucru
  • Registratie: Januari 2004
  • Niet online

Lustucru

26 03 2016

Adelbert schreef op maandag 10 maart 2008 @ 08:58:
[...]
Bij de sectie.footers neem ik aan dat daar een sectie aangegeven moet worden? Als dit het geval is dan ben je toch nog steeds afhankelijk van het aantal secties?
Nee, Je itereert door je secties, dus sectie is al een sectionobject. Het enige wat je moet aangeven is welke footer (wdHeaderFooterEvenPages, wdHeaderFooterFirstPage of wdHeaderFooterPrimary) je wilt aanpassen; in dit geval dus de wdHeaderFooterPrimary.

Tip: door eerst sectie al te declareren als section door vooraan Dim sectie as section op te nemen weet intellisense ook wat je aan het doen bent en geeft hij automatisch de verschillende mogelijkheden als je intikt sectie.footers( :)

[ Voor 18% gewijzigd door Lustucru op 10-03-2008 10:49 ]

De oever waar we niet zijn noemen wij de overkant / Die wordt dan deze kant zodra we daar zijn aangeland


  • Adelbert
  • Registratie: Januari 2007
  • Laatst online: 27-01-2021
Dat is hem helemaal :D Bedankt! Ooit komt het wel goed tussen mij en VBA.

Toch nog een kleine hapering. De cursor moet in de laatse goede sectie staan voordat de macro werkt. Hoe kan ik dit het beste aanpakken?

[ Voor 54% gewijzigd door Adelbert op 10-03-2008 16:36 ]


  • Adelbert
  • Registratie: Januari 2007
  • Laatst online: 27-01-2021
Ik heb nu geprobeerd met verschillende macro's om automatisch in de goede sectie te gaan staan dat is allemaal geen probleem. Maar ik moet de macro om de footers te link altijd 2 keer uitvoeren omdat het anders niet werkt.

Ook 2 keer dezelfde actie in een macro plaatsen werkt niet.

  • F_J_K
  • Registratie: Juni 2001
  • Niet online

F_J_K

Moderator CSA/PB

Front verplichte underscores

Wat lukt er dan niet en wat is precies (het verdachte deel van) de code?

Naar de juiste plaats gaan kan je automatiseren, maar zou met een fatsoenlijk loopje niet nodig moeten zijn (zolang je in ActiveDocument zit dan natuurlijk).

[ Voor 5% gewijzigd door F_J_K op 11-03-2008 14:04 ]

'Multiple exclamation marks,' he went on, shaking his head, 'are a sure sign of a diseased mind' (Terry Pratchett, Eric)


  • Adelbert
  • Registratie: Januari 2007
  • Laatst online: 27-01-2021
Als eerste mijn

code:
1
2
3
4
5
6
7
8
Sub footers3()
'
' footers bijwerken
'
For Each sectie In ActiveDocument.Sections
sectie.footers(wdHeaderFooterPrimary).LinkToPrevious = True
Next
End Sub


Het document is actief, echter moet ik deze macro wel 2 keer uitvoeren voordat de footers aangepast worden.

  • F_J_K
  • Registratie: Juni 2001
  • Niet online

F_J_K

Moderator CSA/PB

Front verplichte underscores

Werkt hier prima.

'Multiple exclamation marks,' he went on, shaking his head, 'are a sure sign of a diseased mind' (Terry Pratchett, Eric)


  • Adelbert
  • Registratie: Januari 2007
  • Laatst online: 27-01-2021
Heb je het bestand eerste opgeslagen misschien ? In mijn geval is het een apparte situatie, het is namelijk een document gegenereerd uit een andere applicatie, die nog niet opgeslagen is.

Verwijderd

zou niet mogen uitmaken. maar misschien is de volgorde van uitvoeren van koppeling wel van belang en moet dit andersom gebeuren (ongetest)
Visual Basic:
1
2
3
4
5
6
7
sub FootersBijwerken
  dim lpSectie as long

  for lpsectie=activedocument.sections.count to 1 step -1
    ActiveDocument.Sections(lpsectie).footers(wdHeaderFooterPrimary).LinkToPrevious = True
  next
end sub

  • Adelbert
  • Registratie: Januari 2007
  • Laatst online: 27-01-2021
Haalt jammer genoeg niets uit.

Verwijderd

ok, probeer deze dan eens. het zou kunnen dat mijn vorige macro wel werkt als je de lus beperkt van 2 tot aantalsecties ipv 1 tot aantalsecties.
Visual Basic:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Sub FootersBijwerken ()
  Dim KopVoet As Long
  Dim Sectie  As Long

  If (1 < ActiveDocument.Sections.Count) Then
    For Sectie = 2 To ActiveDocument.Sections.Count
      For KopVoet = 1 To ActiveDocument.Sections(Sectie).Headers.Count
        ActiveDocument.Sections(Sectie).Headers(KopVoet).LinkToPrevious = True
      Next
      For KopVoet = 1 To ActiveDocument.Sections(Sectie).Footers.Count
        ActiveDocument.Sections(Sectie).Footers(KopVoet).LinkToPrevious = True
      Next
    Next
  End If
End Sub
Pagina: 1