Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Kopfzeile per VBA mit Seitenzahl und Text formatieren unter Word2003

443 views
Skip to first unread message

Bulin, Michael

unread,
May 5, 2008, 12:16:49 PM5/5/08
to
Hallo
ich google schon eine ganze Weile im Netz herum, bin aber noch auf keine
brauchbare Lösung gestoßen.

Mein Probelem:

ich möchte unter Word2003 per VBA Kopfzeilen für gerade und ungerade
Seiten generieren die das folgende vereinfachte Format besitzen soll
(Die Seite wurde entsprechend mit OddAndEvenPagesHeaderFooter = True
konfigiuriert):


ungerade Seite:
Tabstop Seitenzahl Tabstop "Überschrift"

gerade Seite:
Tabstop "Überschrift" Tabstop Seitenzahl

Das Setzen der Tabulatoren und das Einfügen des Überschriften-Textes
klappt mit:

' Inhalte von Kopf- und Fußzeilen löschen
For z = 1 To 3
ActiveDocument.Sections(1).Headers(z).Range.Delete
ActiveDocument.Sections(1).Footers(z).Range.Delete
Next z

' ungerade Seite
Set lo_Range =
ActiveDocument.Sections(1).Headers(wdHeaderFooterPrimary).Range
With lo_Range
.ParagraphFormat.TabStops.ClearAll
.ParagraphFormat.TabStops.Add Position:=CentimetersToPoints(0.1), _
Alignment:=wdAlignTabLeft, _
Leader:=wdTabLeaderSpaces

.ParagraphFormat.TabStops.Add Position:=CentimetersToPoints(19.5), _
Alignment:=wdAlignTabRight, _
Leader:=wdTabLeaderSpaces

.InsertBefore (vbTab)


ActiveDocument.Fields.Add Range:=lo_Range, _
Type:=wdFieldEmpty, _
Text:="PAGE \* Arabic ", _
PreserveFormatting:=True
.InsertAfter (vbTab & gsc_HeaderEven)

End With


' gerade Seite
Set lo_Range =
ActiveDocument.Sections(1).Headers(wdHeaderFooterEvenPages).Range
With lo_Range
.ParagraphFormat.TabStops.ClearAll
.ParagraphFormat.TabStops.Add Position:=CentimetersToPoints(0.1), _
Alignment:=wdAlignTabLeft, _
Leader:=wdTabLeaderSpaces

.ParagraphFormat.TabStops.Add Position:=CentimetersToPoints(19.5), _
Alignment:=wdAlignTabRight, _
Leader:=wdTabLeaderSpaces


.InsertBefore (vbTab & gsc_HeaderEven & vbTab)

ActiveDocument.Fields.Add Range:=lo_Range, _
Type:=wdFieldEmpty, _
Text:="PAGE \* Arabic ", _
PreserveFormatting:=True

End

Set lo_Range = Nothing

Leider Positioniert sich die Seitennummer nicht an der gewünschte Stelle.


Zusätzlich möchte ich noch die Startseitennummer festlegen können, die
ich der Einfachheit halber per InputBox eingeben und der in der
automatischen Page-Angabe zuschlagen möchte. Wie muss dann die
Fields.add-Syntax ändern, damit ich zur PAGE-Variable noch den Wert der
Startseiten-Nummer addieren kann.

Kann mit jemand helfen und eione Tipp geben?

Thx & bye
Micha

Robert M. Franz (RMF)

unread,
May 8, 2008, 12:21:11 PM5/8/08
to
Bulin, Michael wrote:
[..]

> Zusätzlich möchte ich noch die Startseitennummer festlegen können, die
> ich der Einfachheit halber per InputBox eingeben und der in der
> automatischen Page-Angabe zuschlagen möchte. Wie muss dann die
> Fields.add-Syntax ändern, damit ich zur PAGE-Variable noch den Wert der
> Startseiten-Nummer addieren kann.

direkt kannst Du einem PAGE-Feld nichts hinzudichten. Entweder sagst Du
dem Abschnitt, er soll auf Seite x beginnen (sicher die sauberste
Lösung), oder Du verschachtelst das Feld à la:

{ ={ PAGE }+x }

Gruss
Robert
--
/"\ ASCII Ribbon Campaign | MSFT |
\ / | MVP | Scientific Reports
X Against HTML | for | with Word?
/ \ in e-mail & news | Word | http://www.masteringword.eu/

Thomas Gahler

unread,
May 9, 2008, 9:25:15 AM5/9/08
to
Hallo Robert
Hallo Michael

> direkt kannst Du einem PAGE-Feld nichts hinzudichten.

das stimmt


> Entweder sagst Du dem Abschnitt, er soll auf Seite x beginnen (sicher die
> sauberste Lösung),

genau so macht man es. mit dem .PageNumbers-Objekt

With Selection.Sections(1).Headers(1).PageNumbers
.NumberStyle = wdPageNumberStyleArabic
.HeadingLevelForChapter = 0
.IncludeChapterNumber = False
.ChapterPageSeparator = wdSeparatorHyphen
.RestartNumberingAtSection = True
.StartingNumber = 3
End With


>Du verschachtelst das Feld à la:
> { ={ PAGE }+x }

Würg, würde ich nicht empfehlen

Vielleicht komme ich am Wochenende dazu die Frage genau zu beantworten


--
Thomas Gahler
MVP für WordVBA
Co-Autor von »Microsoft Word-Programmierung.
Das Handbuch« (MS Press)


- Windows XP (SP2), Office XP (SP3)


Thomas Gahler

unread,
May 15, 2008, 6:13:55 AM5/15/08
to
Hallo Michael

> ich möchte unter Word2003 per VBA Kopfzeilen für gerade und ungerade
> Seiten generieren die das folgende vereinfachte Format besitzen soll (Die
> Seite wurde entsprechend mit OddAndEvenPagesHeaderFooter = True
> konfigiuriert):

ich sehe du bist ja schon ganz weit gekommen, deshalb nur ein paar kleine
Tipps. Und wenn die nicht reichen, dann kannst du noch nachfragen.

> Tabstop Seitenzahl Tabstop "Überschrift"
Ist das Wort "Überschrift" statisch oder kennst du das Feld 'StyleRef'?


> Leider Positioniert sich die Seitennummer nicht an der gewünschte Stelle.

Ich hatte so eine änliche Erfahrung genacht wie du. Das .Range-Obejket
verhält sich zusammen mit dem {Page}-Feld ziemlich zickig. Meine Kopfzeile
sieht so aus
"Text" vbTab {page} " / " {numpages}
Wenn ich von Links her Element nach dem anderen aufgefüllt hatte, so habe
ich es nicht hin gekriegt. Also habe ich zur Umgehung des Problems den
Retourweg gewählt.
Also zurerst {numpages}, dann das Trennzeichen " / ", anschliessend {page},
noch der vbTab und am Schluss der "Text". Und alles läuft wie geschmiert....

> Zusätzlich möchte ich noch die Startseitennummer festlegen können, die ich
> der Einfachheit halber per InputBox eingeben und der in der automatischen
> Page-Angabe zuschlagen möchte. Wie muss dann die Fields.add-Syntax ändern,
> damit ich zur PAGE-Variable noch den Wert der Startseiten-Nummer addieren
> kann.

Dazu habe ich mich bereits geäussert, das .PageNumbers-Objekt ist dein
Freund.

0 new messages