Discussion:
Benanntes Objekt (Wasserzeichen) löschen
(zu alt für eine Antwort)
Daniel Simon
2006-02-23 14:58:57 UTC
Permalink
Hallo NG,

ich habe einem Word-Objekt (Shape) einen Namen zugeordnet um es löschen zu
können, allerdings funktioniert das ganze nicht so wie ich mir das
vorgestellt habe. Das was da passiert kommt mir ziemlich merkwürdig vor und
sieht für mich wie ein Bug in Word aus.

Ich wollte in einer abschnittsgeschützten Kopfzeile ein Wasserzeichen
erstellen, das entfernt wird, wenn ich eine von mir erstellte Schaltfläche
in der Symbolleiste drücke.

Den dazugehörigen Code habe ich damals von Dietmar Feurer bekommen, als ich
hier die Frage stellte, wie ich mit VBA ein Word-Art erzeuge
(MID:***@TK2MSFTNGP09.phx.gbl).

Wenn ich aber nun die Schaltfläche drücke, um das Wasserzeichen entfernen
zu können erhalte ich einen Laufzeitfehler '91': Objektvariable oder
With-Blockvariable nicht festgelegt.

Das für mich nicht verständliche ist, das es funktioniert, wenn ich anstatt
Sub Document_New() Sub EntwurfEinfuegen schreibe. Manuell das Wasserzeichen
zu entfernen über Extras->Makros->Makro ausführen funktioniert allerdings
bei Sub Document_New(), sofern man das Makro nicht über die Schaltfläche
schon ausgeführt hat. Dabei ist der Code, der durch die Schaltfläche
ausgeführt wird eigentlich der selbe.


Also nochmal in Kurzform:

Dokument_New() + Schaltfläche benutzen (die EntwurfLoeschen() ausführt):
funktioniert nicht

Dokument_New() + Extras->Makros->Makro ausführen (EnwurfLoeschen()):
funktioniert

EntwurfEinfuegen (muss halt manuell audgeführt werden)+ Schaltfläche
benutzen:
funktioniert


Der von mir modifizierte Code ist folgender:

'###Code-Anfang###

Public oShape As Shape

Sub Document_New()
GrafikErstellen oShape
End Sub

Private Sub GrafikErstellen(ByRef oShape As Shape)
Dim KZ As HeaderFooter
Set KZ = ActiveDocument.Sections(1).Headers(wdHeaderFooterPrimary)
Set oShape = KZ.Shapes.AddTextEffect(0, "Entwurf", _
"Arial", 72, True, False, 0, 0, KZ.Range)
oShape.Fill.ForeColor = RGB(192, 192, 192)
oShape.Line.ForeColor = RGB(192, 192, 192)
oShape.ZOrder msoSendBehindText
oShape.Width = ActiveDocument.Sections(1).PageSetup.PageHeight - 200
oShape.Rotation = -45
oShape.Left = -100
oShape.Top = 300
End Sub

Sub EntwurfLoeschen()
oShape.Delete
End Sub

'###Code-Ende###

Ich hoffe, dass mir dieses für mich seltsame Verhalten erklärt werden kann.
Ich will erreichen, dass der Code richtig beim Erstellen eines neuen
Dokuments ausgeführt wird, so dass man ihn mit der Schaltfläche löschen
kann.
--
Gruß Daniel
benutze Win 2k(SP4), Office 97(SR2)
MS-Word FAQ: http://mypage.bluewin.ch/reprobst/
Thomas Gahler
2006-02-23 15:17:09 UTC
Permalink
Hallo Daniel
Post by Daniel Simon
ich habe einem Word-Objekt (Shape) einen Namen zugeordnet
Hast du nirgens gemacht, sonst würde die .Name-Eigenschaft gefüllt
Post by Daniel Simon
funktioniert nicht
Dann würde ich mal gelegentlich die Symbolleistenschaltfläche noch
definierten
Deine Objektvariable wird wohl nicht immer so gefüllt sein wie du meinst,
darum klappt es nicht.

Habe den Code ein wenig angepasst (aber nicht getestet), Zeilen die du
löschen kannst habe ich in Klammern gesetzt.


'###Code-Anfang###

'[Public oShape As Shape]

Sub Document_New()
'[ GrafikErstellen oShape]
GrafikErstellen
'[End Sub]


'[Private Sub GrafikErstellen(ByRef oShape As Shape)]
Private Sub GrafikErstellen
Dim oShape As Word.Shape
Dim KZ As Word.HeaderFooter
Set KZ = ActiveDocument.Sections(1).Headers(wdHeaderFooterPrimary)
Set oShape = KZ.Shapes.AddTextEffect(0, "Entwurf", _
"Arial", 72, True, False, 0, 0, KZ.Range)
with oshape
.name = "Wasserzeichen"
.Fill.ForeColor = RGB(192, 192, 192)
.Line.ForeColor = RGB(192, 192, 192)
.ZOrder msoSendBehindText
.Width = ActiveDocument.Sections(1).PageSetup.PageHeight - 200
.Rotation = -45
.Left = -100
.Top = 300
end with
End Sub

Sub EntwurfLoeschen()

Dim oShape As Word.Shape
Dim KZ As Word.HeaderFooter
Set KZ = ActiveDocument.Sections(1).Headers(wdHeaderFooterPrimary)
Set oShape = KZ.Shapes("Wasserzeichen")
oShape.Delete
End Sub

'###Code-Ende###






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

- Windows XP (SP1), Office XP (SP3)
Daniel Simon
2006-02-23 15:59:09 UTC
Permalink
Super, funktioniert auf Anhieb. Danke.
--
Gruß Daniel
benutze Win 2k(SP4), Office 97(SR2)
MS-Word FAQ: http://mypage.bluewin.ch/reprobst/
Loading...