Wie kann ich (evtl. mittels VBA) verhindern, dass ein Anwender eine Dokumentvorlage unter dem gleichen Namen speichert und diese dadurch unbrauchbar macht?
Die Vorlage wird beim Öffnen automatisch mit Daten aus einer Access-Datenbank gefüllt…
Danke Euch
Gruß Uli
Hallo, Uli!
Wie kann ich (evtl. mittels VBA) verhindern, dass ein Anwender
eine Dokumentvorlage unter dem gleichen Namen speichert und
diese dadurch unbrauchbar macht?
Die Vorlage wird beim Öffnen automatisch mit Daten aus einer
Access-Datenbank gefüllt…
Da dazu vermutlich eh die Makros aktiviert sein müssen, geht das mit VBA. Schau mal in der VBA-Hilfe unter dem Ereignis DocumentBeforeSave (des Application-Objekts) nach. Hier Sniplet:
Public WithEvents appWord as Word.Application
Private Sub appWord\_DocumentBeforeSave \_
(ByVal Doc As Document, \_
ByVal SaveAsUI As Boolean, \_
Cancel As Boolean)
Dim intResponse As Integer
intResponse = MsgBox("Do you really want to " \_
& "save the document?", \_
vbYesNo)
If intResponse = vbNo Then Cancel = True
End Sub
Entweder den Code in Deine Vorlage oder, wenn Du das Dokument aus Access heraus erstellst, analog zu obigem Code.
Dort dann auf einen hardvercodeten oder dynamisch ausgelesenen Dateinamen überprüfen und das Speichern durch Setzen von Cancel=True verhindern.
Grundsätzlich aber gar nicht, denn die Anwender kommen über kurz oder lang auf die Idee, völlig andere Dokumente unter dem betreffenden Namen zu speichern, wie ich leider am eigenen Leib erfahren musste. Das geht dann nur über die Zugriffsrechte auf Systemebene…
Gruß, Manfred
Wenn Du die „Vorlage“ nicht als .doc speicherst, sondern mittels „Speichern unter“ als Dokumentvorlage (.dot), weiss auch Word, dass es sich um eine Vorlage handelt. Wenn Du jetzt „Neu“ wählst oder mittels VBA/OLE documents.add eine neue Datei erzeugst, sieht dieses zwar aus wie Deine Vorlage, heisst aber „Dokument1“ und fragt beim Speichern, wie es genannt werden soll.
Willst Du vermeiden, dass der Benutzer den Namen bestimmt, füge im Visualbasic-Editor unter „Thisdocument“ eine Ereignisprozedure für die Ereignisse close und save ein und speichere per Code.
Gruss, Dennis
[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]