ahstax
Goto Top

Mit VBScript ein Wasserzeichen aus einem Word-Dokument entfernen

Hallo,

mit googeln und experimentieren hab ich es hiermit:

Dim ... 
Set objWord = CreateObject("Word.Application")  
Set objDoc = objWord.Documents.Open(docName)
...
bbPath = GetBuildingBlockPath(objWord, "Built-In Building Blocks.dotx")  
entryName = "ENTWURF 1"  

With objWord.ActiveDocument
	.ActiveWindow.ActivePane.View.SeekView = 10
	objWord.Templates(bbPath).BuildingBlockEntries(entryName).Insert objWord.Selection.Range, True   
	.SaveAs(newPath)
End With

hinbekommen, mit VBScript ein Wasserzeichen "Entwurf" in ein bestehendes Word-Dokument einzufügen.

Was ich nicht hin bekomme, ist das Wasserzeichen wieder zu entfernen. Wie es scheint, würde hiermit:
	objWord.Templates(bbPath).BuildingBlockEntries(entryName).Delete   
aus dem Template der Eintrag "ENTWURF 1" entfernt, was ja in meinem Fall falsch ist.

Wie entfernt man also das Wasserzeichen wieder mit VBScript?

Neugierige Grüße,
Andreas

Content-ID: 4222626613

Url: https://administrator.de/contentid/4222626613

Ausgedruckt am: 25.11.2024 um 10:11 Uhr

4091525239
Lösung 4091525239 10.10.2022 aktualisiert um 17:10:38 Uhr
Goto Top
    Dim shp
    With objWord.ActiveWindow
        .ActivePane.View.SeekView = 9
        For Each shp In objWord.Selection.HeaderFooter.Shapes
            If shp.AlternativeText = "ENTWURF 1" Then  
                shp.Delete
                Exit For
            End If
        Next
        .ActivePane.View.SeekView = 0
    End With
ahstax
ahstax 11.10.2022 um 14:20:49 Uhr
Goto Top
Herzlichen Dank für die Antwort!

Muss ich da dem Wasserzeichen beim einfügen den Alternativtext erst noch mitgeben?
4091525239
4091525239 11.10.2022 aktualisiert um 15:58:01 Uhr
Goto Top
In der Regel ist das bei den Building Blocks automatisch der Name des Blocks. Bei reinen Bildern evt. noch eine angehängte Dateierweiterung.
ahstax
ahstax 12.10.2022 um 10:45:56 Uhr
Goto Top
Nachdem ich mir mit "MsgBox shp.AlternativeText" in der Schleife die Texte habe anzeigen lassen, habe ich festgestellt, dass der Test in diesem Fall wohl nicht "ENTWURF 1" sondern nur "ENTWURF" ist... Und damit klappts dann auch.

DANKE für Deine Hilfe!
ahstax
ahstax 14.10.2022 um 11:56:21 Uhr
Goto Top
Bitte gestattet mir die Nachfrage, wie ich das Wasserzeichen (s.o.) in jeder Seite eingefügt bekomme. Mein Code fügt das Wasserzeichen nur auf Seite 1 ein...

Entfernt der Code von @4091525239 Wasserzeichen aus dem gesamten Dokument? ODer ebenfalls nur von Seite 1?
4091525239
4091525239 14.10.2022 aktualisiert um 12:06:29 Uhr
Goto Top
Was sagt dir wohl das hier ...
objWord.Selection
genau, wird dort entfernt wo die aktuelle Selektion gerade ist ... Gilt genauso für das Hinzufügen.
wie ich das Wasserzeichen (s.o.) in jeder Seite eingefügt bekomme
Füge es in der Kopf/Fußzeile ein, und entferne den Haken bei "erste Seite anders".
ahstax
ahstax 14.10.2022 um 12:09:01 Uhr
Goto Top
Danke @4091525239,

"erste Seite anders" zu entfernen geht leider nicht... Die erste Seite hat einen anderen Aufbau also die folgenden...
4091525239
Lösung 4091525239 14.10.2022 aktualisiert um 12:19:54 Uhr
Goto Top
Zitat von @ahstax:

Danke @4091525239,

"erste Seite anders" zu entfernen geht leider nicht... Die erste Seite hat einen anderen Aufbau also die folgenden...

Dann fügst du es dort eben auch zusätzlich ein...

Range für erste Seite
ActiveDocument.Sections(1).Headers(wdHeaderFooterFirstPage).Range

für die anderen
ActiveDocument.Sections(1).Headers(wdHeaderFooterPrimary).Range
ahstax
ahstax 14.10.2022 um 12:29:41 Uhr
Goto Top
Ich bekomme einen Fehler "Objekt nicht unterstützt", wenn ich diese Zeilen

With objWord.ActiveDocument
	.ActiveWindow.ActivePane.View.SeekView = 9
	objWord.Templates(bbPath).BuildingBlockEntries(entryName).Insert objWord.Selection.Range, True   
End With	

diese Zeilen mache:

With objWord.ActiveDocument
	.ActiveWindow.ActivePane.View.SeekView = 9
	objWord.Templates(bbPath).BuildingBlockEntries(entryName).Insert ActiveDocument.Sections(1).Headers(wdHeaderFooterFirstPage).Range, True  
	objWord.Templates(bbPath).BuildingBlockEntries(entryName).Insert ActiveDocument.Sections(1).Headers(wdHeaderFooterPrimary).Range, True    
End With	
4091525239
4091525239 14.10.2022 aktualisiert um 12:34:03 Uhr
Goto Top
Ist doch klar, wenn du das nicht in Word selbst ausführst musst du die Konstanten (wdHeaderFooterFirstPage(2) und wdHeaderFooterPrimary(1)) durch ihre Integer Werte ersetzen!! Hast du doch oben selbst auch schon gemacht ... Man ej, kann man sich nicht mal 5 Minuten länger damit beschäftigen, und nicht gleich bei jedem Fehler aufgeben ??
ahstax
ahstax 14.10.2022 um 13:11:27 Uhr
Goto Top
Ja @4091525239, Du hast Recht. Man gibt zu schnell auf, wenn man eine beeindruckend gute Hilfequelle gefunden hat!
Hier: LINK steht es dann auch...


Dennoch... neues Ärgenis:
Lässt sich denn vermeiden, dass mit dem EInfügen des Wasserzeichens ENTWURF eine bereits bestehende Hinterlegung im Header entfernt wird? Also, dass sozusagen das Wasserzeichen hinter das bestehende gelegt wird?
4091525239
Lösung 4091525239 14.10.2022 aktualisiert um 13:47:16 Uhr
Goto Top
Zitat von @ahstax:
Dennoch... neues Ärgenis:
Lässt sich denn vermeiden, dass mit dem EInfügen des Wasserzeichens ENTWURF eine bereits bestehende Hinterlegung im Header entfernt wird? Also, dass sozusagen das Wasserzeichen hinter das bestehende gelegt wird?
Du musst nur den Range passend definieren im Moment ist der ja komplett ausgewählt und wird durch das Einfügen komplett ersetzt. Also collapse die Selection des Ranges ...
Set rng = ActiveDocument.Sections(1).Headers(1).Range
rng.Collapse
' ....  
ahstax
ahstax 17.10.2022 um 11:17:07 Uhr
Goto Top
PERFEKT!!!

Herzlichen, herzlichen Dank!