Ich versuche in einem Dokument, welches unterschiedliche Kopf und Fusszeilen
(Erste Seite anders) hat, ein Wasserzeichen (Wordart) einzufügen.
Das funktioniert auch wunderbar für die erste Seite, jedoch auf den
Folgeseiten (mit wdHeaderFooterPrimary oder wdHeaderFooterEven)
krieg ich das nicht hin.
So sieht mein Code aus:
Dim MyRange As Range, oShape As Shape
Set MyRange =
ActiveDocument.Sections(1).Headers(wdHeaderFooterFirstPage).Range.
Set oShape =
ActiveDocument.Sections(1).Headers(wdHeaderFooterFirstPage).Shapes.AddTextEf
fect(msoTextEffect1, WaterMarkText, "Arial Black", "24", msoFalse, msoFalse,
5, 0, MyRange)
With oShape
.RelativeHorizontalPosition = wdRelativeHorizontalPositionPage
.RelativeVerticalPosition = wdRelativeVerticalPositionPage
.Top = CentimetersToPoints(15)
.Left = CentimetersToPoints(1.5)
.Fill.ForeColor.RGB = RGB(192, 192, 192)
.Line.ForeColor.RGB = RGB(192, 192, 192)
.IncrementRotation -45
.WrapFormat.Type = wdWrapNone
.ZOrder msoSendBehindText
End With
Vielen Dank für jede Hilfe
Michael
> Das funktioniert auch wunderbar für die erste Seite, jedoch auf den
> Folgeseiten (mit wdHeaderFooterPrimary oder wdHeaderFooterEven)
> krieg ich das nicht hin.
>
> So sieht mein Code aus:
>
Und, mit welchem Code hast Du für diese anderen Seiten probiert? WIE
funktioniert es nicht? Kriegst Du eine Fehlermeldung? Wenn ja,
welche?
Cindy Meister
INTER-Solutions, Switzerland
http://www.mvps.org/word
http://homepage.swissonline.ch/cindymeister
http://go.compuserve.com/MSOfficeForum
Rückfragen & Antworten nur in der Newsgroup, bitte!
an Stelle von .Headers(wdHeaderFooterFirstPage) habe ich
.Headers(wdHeaderFooterPrimary) oder .Headers(wdHeaderFooterEven) benutzt.
im Code diese zwei Zeilen
Set MyRange =
ActiveDocument.Sections(1).Headers(wdHeaderFooterPrimary).Range.
Set oShape =
ActiveDocument.Sections(1).Headers(wdHeaderFooterPrimary).Shapes.AddTextEffe
ct(msoTextEffect1, WaterMarkText, "Arial Black", "24", msoFalse, msoFalse,5,
0, MyRange)
Ich kriege keine Fehlermeldung sondern das Wordart Objekt wird immer in der
Kopfzeile der ersten Seite eingefügt.
Besten Dank
Michael
Doch ich habe das MyRange-Objekt umdefiniert. Das Wasserzeichen für die
erste wie auch für die Folgeseiten
wird jedoch immer auf der ersten Seite eingefügt. Ich denke bei der
Seiteneinrichtung kann ich wohl
nichts falsch machen (Seite einrichten - Layout - Kopf-/Fusszeilen - Erste
Seite anders - Checkbox aktivieren)
Wenn ich die Seiteneinrichtung (Kopf-/Fusszeilen --> erste Seite anders) im
Code vornehme
(ActiveDocument.PageSetup.DifferentFirstPageHeaderFooter = True) krieg ich
es hin.
Bringt mir jedoch nichts, da ich die Vorlage bereits mit dieser
Seiteneinrichtung für eine andere
erste Kopfzeile definiert habe.
Besten Dank
Michael
ich glaube, das liegt an der Word Version.
In 2000 läuft der Code sauber, in 97 stehen beide Wordarts auf der ersten
Seite.
Scheint ne Macke in Word 97 zu sein.
Du kannst das aber umgehen, wenn Du in die passende Kopfzeile gehst und
dann das Selection-Objekt verwendest:
Selection.HeaderFooter.Shapes.AddTextEffect msoTextEffect1, Watermarktext,
"Arial Black", "24", msoFalse, msoFalse, 5, 0
By the way: Warum packst Du die passenden Word-Arts nicht schon von
vornherein in die Vorlage? Dann wärst Du doch den ganzen Ärger los.
Vorlage zweiseitig machen, Seite einrichten erste Seite anders, in die
passenden Kopfzeilen die Word-Art-Objekte einbauen, Vorlage wieder einseitig
machen, abspeichern.
Eine solche Vorlage würde automatisch, wenn das Dokument zweiseitig wird,
die passende Kopfzeile zeigen.
Ich hoffe, das hilft Dir.
So long
Ingo
"Michael Linsi" <linsi_...@hotmail.com> schrieb im Newsbeitrag
news:#z3CTBmfCHA.3752@tkmsftngp08...
Ich habe das Problem mit Office 97, 2000 und XP.
Das Selection-Objekt hatte ich eingesetzt, wollte es jedoch ablösen,
da ich das Bildschirmgeflimmer weghaben wollte.
Leider kann ich die Wordart-Objekte nicht schon in die Vorlage einfügen,
weil es sich um Wasserzeichen handelt welche, je nachdem welche Kopie
(Vorlage für Rechnung) gedruckt wird varriert (eingefügt, gedruckt und
wieder
entfernt werden).
Die Kopfzeilen mit Firmenlogo usw. habe ich bereits in der Vorlage mit
abgespeichert.
regards
Michael
Ich schen k dir ein Wenig Code, wie ich ihn bei mir im Einsatz habe. Ich
verwende zwar kein Wordart sondern eine '.Bmp'-Datei aber das ist wohl nur
ein kleines Detail.
Ich untersuche auch nicht, ob die Kopfzeile bereits mit der Kopfziele des
vorherigen Abschnittes verknüpft ist, da allfällige doppelte Wasserzeichen
auf dem Ausdruck nicht zu sehen sind.
'--------------------------------------------------
'...
Dim oRNG As Range
Dim oSRY As Range
Dim iNum As Integer
Dim iZähler As Integer
'...
'In jede Kopfzeile ein Wasserzeichen einfügen, bis ein Fehler
auftritt.
For iZähler = 1 To ActiveDocument.Sections.Count
For Each oSRY In ActiveDocument.StoryRanges
Select Case True
Case (oSRY.StoryType = wdPrimaryHeaderStory)
If
ActiveDocument.Sections(iZähler).Headers(wdHeaderFooterPrimary).Exists Then
Set oRNG =
ActiveDocument.Sections(iZähler).Headers(wdHeaderFooterPrimary).Range
iNum = funcWasserzeichenEinfügen(oRNG, sDummy,
iNum)
End If
Case (oSRY.StoryType = wdFirstPageHeaderStory)
If
ActiveDocument.Sections(iZähler).Headers(wdHeaderFooterFirstPage).Exists
Then
Set oRNG =
ActiveDocument.Sections(iZähler).Headers(wdHeaderFooterFirstPage).Range
iNum = funcWasserzeichenEinfügen(oRNG, sDummy,
iNum)
End If
Case (oSRY.StoryType = wdEvenPagesHeaderStory)
If
ActiveDocument.Sections(iZähler).Headers(wdHeaderFooterEvenPages).Exists
Then
Set oRNG =
ActiveDocument.Sections(iZähler).Headers(wdHeaderFooterEvenPages).Range
iNum = funcWasserzeichenEinfügen(oRNG, sDummy,
iNum)
End If
End Select
Next oSRY
Next iZähler
'...
'--------------------------------------------------
Diese Funktion plaziert die das Wasserzeichen auf der entsprechenden
Kopfzeile. Egal wie gross die '.Bmp'-Datei ist. das Ding ist immer in der
Mitte des Dokuments.
'--------------------------------------------------
Private Function funcWasserzeichenEinfügen _
(ByVal oKopfzeile As Range, _
ByVal SDatei As String, _
ByVal iKopfzeileNummer As Integer)
Dim iGrafikBreite As Single
Dim iGrafikHöhe As Single
Dim oWasserzeichen As Shape
Set oWasserzeichen = ActiveDocument.Shapes.AddPicture _
(Anchor:=oKopfzeile, _
FileName:=SDatei, _
LinkToFile:=False, _
SaveWithDocument:=True)
With oWasserzeichen
Rem .Name = "Wasserzeichen" & CStr(iKopfzeileNummer)
iGrafikBreite = .Width
iGrafikHöhe = .Height
.RelativeHorizontalPosition = wdRelativeHorizontalPositionPage
.RelativeVerticalPosition = wdRelativeVerticalPositionPage
.Left = (ActiveDocument.PageSetup.PageWidth - iGrafikBreite) / 2
.Top = (ActiveDocument.PageSetup.PageHeight - iGrafikHöhe) / 2
.WrapFormat.Type = wdWrapNone
.ZOrder msoSendToBack
End With
funcWasserzeichenEinfügen = iKopfzeileNummer + 1
End Function
'--------------------------------------------------
--
Thomas Gahler
MVP für WordVBA
- Windows XP, Office XP (SP1)
> Leider ist das kein kleines Detail, denn genau mit Wordart-Objekten
> funktioniert es nicht.
folgendes Makro sollte das gewünschte auch mit WordArt-Objekten
bewerkstelligen (es fügt ein Wasserzeichen pro Abschnitt ein und
gleichzeitig in die Kopfzeile die Abschnittszahl)
Sub Wasserzeichen()
Dim mySec As Section
Dim strWatermark As String
Dim myShape As Shape
'Wasserzeichen einfügen
For Each mySec In ActiveDocument.Sections
With mySec.Headers(wdHeaderFooterFirstPage)
' Sicherstellen, dass auch wirklich der Abschnitt markiert ist
Selection.GoTo what:=wdGoToSection, which:=wdGoToAbsolute, _
Count:=mySec.Index
ActiveWindow.ActivePane.View.SeekView = wdSeekCurrentPageHeader
strWatermark = "Abschnitt " & mySec.Index
.Range.InsertAfter strWatermark
ActiveDocument.GoTo what:=wdSection, which:=mySec.Index
Set myShape = .Shapes.AddTextEffect(msoTextEffect1, strWatermark, _
"Arial Black", 36#, msoFalse, msoFalse, 240.75, 222.75)
With myShape
.Select
.Fill.Visible = msoTrue
.Fill.Solid
.Fill.ForeColor.RGB = RGB(255, 255, 255)
.Fill.Transparency = 0#
.Line.Weight = 0.75
.Line.DashStyle = msoLineSolid
.Line.Style = msoLineSingle
.Line.Transparency = 0#
.Line.Visible = msoTrue
.Line.ForeColor.RGB = RGB(0, 0, 0)
.Line.BackColor.RGB = RGB(255, 255, 255)
.LockAspectRatio = msoFalse
.Height = 280
.Width = 320
.Rotation = 330#
.RelativeHorizontalPosition = _
wdRelativeHorizontalPositionPage
.RelativeVerticalPosition = _
wdRelativeVerticalPositionPage
.Left = CentimetersToPoints(6)
.Top = CentimetersToPoints(7.86)
.LockAnchor = False
.WrapFormat.Type = wdWrapNone
.WrapFormat.Side = wdWrapBoth
.WrapFormat.DistanceTop = CentimetersToPoints(0)
.WrapFormat.DistanceBottom = CentimetersToPoints(0)
.WrapFormat.DistanceLeft = CentimetersToPoints(0.32)
.WrapFormat.DistanceRight = CentimetersToPoints(0.32)
End With
ActiveWindow.ActivePane.View.SeekView = wdSeekMainDocument
End With
Next mySec
' Ausdruck für Kopie über Durckerauswahlmenü
' With Dialogs(wdDialogFilePrint)
' .Show
' End With
' Ausdruck der Kopie über DruckenSymbol
' Application.PrintOut
'
'Wasserzeichen löschen
' ActiveWindow.ActivePane.View.SeekView = wdSeekCurrentPageHeader
' Selection.HeaderFooter.Shapes.SelectAll
' Selection.ShapeRange.Visible = msoFalse
' ActiveWindow.ActivePane.View.SeekView = wdSeekMainDocument
End Sub
--
Gruß Christian
ich komme noch mal auf meinen Vorschlag mit den bereits in die Vorlage
eingefügten Wordart-Objekten zurück.
Mit dem folgenden Code kannst Du den Text bequem umdefinieren.
watermarktext = "First"
ActiveDocument.Sections(1).Headers(wdHeaderFooterPrimary).Shapes(1).TextEffe
ct.Text = watermarktext
watermarktext = "Second"
ActiveDocument.Sections(1).Headers(wdHeaderFooterPrimary).Shapes(2).TextEffe
ct.Text = watermarktext
Läuft schnell, flackert nicht und müsste eigentlich das ergeben, was Du
brauchst.
Scheint mit Word 97 und Word 2000 zu laufen.
Allerdings müssen die Objekte in der richtigen Reihenfolge eingebaut werden,
sonst sind shapes(1) und shapes(2) vertauscht (geht wohl nicht nach der
Position im Dokument).
Es scheint völlig egal zu sein, daß in beiden Fällen auf
wdheaderfooterprimary zugegriffen wird. Beide Shapes sind definiert.
Das scheint mir auch der Grund zu sein, warum Dein erster Versuch die
Objekte immer auf der ersten Seite plaziert hat.
So long
Ingo