gwenya
Goto Top

Vbs und Normal.dot

vbs und Word / Normal.dot bearbeiten - wie Schreibschutz aufheben

Hallo Allerseits,

nach langer erfolgloser Suche im Internet nach eine Lösung für mein Problem stelle ich nun doch selber die Frage rein:
Ich habe ein vb-Skript, welches die lokale Normal.dot bearbeiten, bzw. die Fußzeile ändern soll. Das läuft inzwischen auch bis zum Speichervorgang. Es ist nicht möglich die Änderungen zu speichern da die Normal.dot immer schreibgeschützt geöffnet wird. Auch der Versuch über das Skript die Dot unter anderem Namen zu speichern und nach dem Schließen von Word die ursprüngliche Vorlage durch die neue zu ersetzen gibt die Meldung "Erlaubnis verweigert" raus.
Kann mir hier jemand helfen und hat einen Tipp, wie ich das umgehen kann. Gibt es eventuell eine Möglichkeit die Vorlage mit anderm Befehl zu öffnen un diese bearbeiten zu können? Momentan öffne ich sie folgendermaßen:
Set wdDoc = wdAppl.Documents.Open ("C:\Dokumente und Einstellungen\riewe\Anwendungsdaten\Microsoft\Vorlagen\Normal.dot", false, false)
Adminrechte sind vorhanden.

Vielen Dank schon mal für eure Hilfe!
Gruß Gweny

Content-ID: 189315

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

Ausgedruckt am: 31.10.2024 um 10:10 Uhr

Karo
Karo 09.08.2012 aktualisiert um 12:12:03 Uhr
Goto Top
Moin,

hatte ich vor langer Zeit mal im Inet gefunden. Die Dot wird nicht sichtbar geöffnet.
Vielleicht geht es bei Dir....

Dim oDot As Document
Set oDot = Documents.Open(strUserTemplateDir & Application.PathSeparator & pcNormal, Visible:=False)
With oDot
.PageSetup.LeftMargin = InchesToPoints(1)
.PageSetup.RightMargin = InchesToPoints(1)
.Styles(wdStyleNormal).Font.Name = "Times New Roman"  
.Styles(wdStyleNormal).Font.Size = 12
.Save
.Close
End With

bye
Karo
GwenyA
GwenyA 09.08.2012 um 15:51:36 Uhr
Goto Top
@ Karo:

danke für deinen Vorschlag. Leider bekomme ich auch damit die Meldung "Erlaubnis verweigert". Auch habe ich inzwischen versucht die Normal.dot erst zu kopieren, dann die Kopie zu bearbeiten und hinterher (nachdem Alles wieder geschlossen wurde) wieder zurückzuspeichern. Das mache ich mit folgendem Befehl:
fso.CopyFile "D:\Normal.dot", sNormal, true
Wobei "true" hier für Überschreiben steht. Auch hier die gleich Verweigerung.
Wenn ich den Copy-Befehl über eine Batch gebe, dann tut es. Es kann daher kein Rechteproblem geben. Gibt es einen Parameter für den Befehl im vbs?

Bitte helft mir! - Vieeelen Dank!
Gruß Gweny
MisterB85
MisterB85 09.08.2012 aktualisiert um 15:55:02 Uhr
Goto Top
Verwende mal den unten aufgeführten Befehl zum speichern deiner DOT-Datei

ActiveDocument.SaveAs FileName:= [String], FileFormat:=[Integer], AddToRecentFiles:=False...

FileName: Der vollständige Pfad samt Dateityperweiterung
FileFormat: Ist ein Integerwert zwischen 1 und 17, musste mal auf der MS-Seite gucken wie dieser für DOT aussieht.
76109
76109 09.08.2012 aktualisiert um 20:32:39 Uhr
Goto Top
Hallo GwenyA!

Versuchs mal so:
Const wdOpenFormatTemplate = 2

Dim oWord, oDoc, sPath
    
Set oWord = CreateObject("Word.Application")  
    
sPath = oWord.Templates("Normal.Dot").FullName  
    
oWord.Documents.Open sPath,,,,,,,,, wdOpenFormatTemplate

Set oDoc = oWord.ActiveDocument
    
'......  
    
oDoc.Close True	'Speichern und Schließen  
       
oWord.Quit

Gruß Dieter
GwenyA
GwenyA 10.08.2012 aktualisiert um 09:13:26 Uhr
Goto Top
Hallo und Guten Morgen,

konnte gestern leider nicht mehr ran, da ich zum Zahnarzt musste und danach ging nichts mehr.
Habe gerade noch den letzten Vorschlag von Dieter ausprobiert. Hier bekomme ich keine Fehlermeldung mehr aber die Änderung wird nicht in der Normal.dot gespeichert. Es geht zwar was und ich sehe die ~Datei kommen und wieder verschwinden, aber Änderungszeit der Vorlage bleibt wie zuvor und die Fussfzeile auch.

Ich glaube ich gebe das in dieser Form auf und realisiere die Teile, die mir per vbs. nicht zugelassen werden über eine Batch. Dazu hätte ich dann aber auch noch eine Frage: Wie kann ich aus einer Batch eine vbs aufrufen und von diesem Skript dann eine Variable an die Batch zurückgeben?

Danke an alle Helfer und im Voraus an alle, die sich zukünftig über mein Problem den Kopf zerbrechen!
Gruß
Gweny

Zusatz@ Dieter: Auf eine andere Vorlage kann ich das Skrit-Beispiel erfolgreich anwenden
76109
76109 10.08.2012 aktualisiert um 19:53:20 Uhr
Goto Top
Hallo Gweny!

Also, bei mir funktionierts per VBS (Win7) auch mit der Normal.dotface-wink

Hier ein (bastla)-Beispiel für die Berechnung einer Zeitdifferenz zwischen zwei Zeitangaben:
@echo off & setlocal
set "Von=01.01.2012-13:22:45"  
set "Bis=10.08.2012-19:24:27"  

set G=%temp%\GetTimeDiff.vbs
>%G% echo D=CDate(Replace(WScript.Arguments(1),"-"," "))-CDate(Replace(WScript.Arguments(0),"-"," ")):WScript.Echo Int(D)^&" "^&Hour(D)^&" "^&Minute(D)^&" "^&Second(D)  

for /f "tokens=1-4" %%a in ('cscript //nologo %G% "%Von%" "%Bis%"') do echo %%a Tage %%b Stunden %%c Minuten %%d Sekunden   

Del %G%
Ausgabe = Tage Stunden Minuten Sekunden

Die VBS-Datei wird im Temp-Verzeichnis gespeichert und am Ende wieder gelöscht.

Batch-Steuerzeichen z.B. (&) müssen im VBS-Code mit (^) Escaped werden.

Gruß Dieter
GwenyA
GwenyA 13.08.2012 um 12:07:20 Uhr
Goto Top
Hallo an alle Helfer,

danke, danke, danke!

Ich habe das Problem nun mit einem Workaround gelöst und die Variablenübergaben folgendermaßen realisert:
Aufruf des vbskripts:
for /F "delims=" %%I IN ('cscript C:\Fusszeile.vbs') Do set "var=%%I"
und für die 2. Batch:
call C:\Normal.bat "%var%"

Nun läuft die Sache!

Gruß
Gweny