Discussion:
Problem mit Dokumentschutz
(zu alt für eine Antwort)
Dietmar Feuerer
2008-06-16 08:49:01 UTC
Permalink
Hallo,
nach langer Zeit habe ich ein kleines Problem mit Dokumentschutz (Word97).
Von einem Makro wird ein Dokument (Tabelle) geschrieben. Am Ende des Codes
rufe ich das Modul "DokuSchutz" mit Application.Run auf. Sein Code lautet:

Sub DokuSchutz()
On Error Resume Next
ActiveDocument.Unprotect
ActiveDocument.Protect Password:="test", _
NoReset:=False, Type:=wdAllowOnlyFormFields
MsgBox "Du kannst das Formblatt jetzt ausdrucken!"
End Sub

Obwohl ich mit ".unprotect" ausdrücklich den Dokumentschutz zuvor aufhebe,
erhalte ich die Fehlermeldung: Laufzeitfehler 4605 Die
CopyStylesFromTemplate-Methode ist nicht verfügbar, weil das Dokument
geschützt ist.

Beim erneuten Makroaufruf tritt die Fehlermeldung nicht mehr auf, sondern
nur beim ersten Mal, nachdem Word97 geladen wurde.

danke für eure Hilfe und
viele Grüße aus der Oberpfalz
Dietmar
l***@schreibbuero-richter.de
2008-06-16 09:37:06 UTC
Permalink
Hallo Dietmar,

zwei Sachen fallen mir dabei auf. Möglicherweise ist das Dokument
vorher auch mit Kennwort geschützt, dann müsste das Kennwort beim
Aufheben des Schutzes mit angegeben werden. Weiter sollte man immer
den Status testen, also ob das Dokument wirklich geschützt ist, um
einen Laufzeitfehler zu vermeiden. Könnte etwa so aussehen:
<Code>Sub DokuSchutz()

If ActiveDocument.ProtectionType = wdAllowOnlyFormFields Then
ActiveDocument.Unprotect
' ActiveDocument.Unprotect Password:="test"
End If
ActiveDocument.Protect Password:="test", _
NoReset:=False, Type:=wdAllowOnlyFormFields
MsgBox "Du kannst das Formblatt jetzt ausdrucken!"

End Sub</Code>

Die Zeile mit dem Passwort natürlich nur verwenden, falls nötig.

Gruß Lisa
_____

http://www.schreibbuero-richter.de
Cindy M.
2008-06-16 10:13:32 UTC
Permalink
Hallo Dietmar,

Mmmm. Als erstes sollst Du "On Error Resume Next" aus dem Code entfernen. Da
werden alle Fehlermeldungen unterdrückt, und es könnte sein, dass eine den
wirklichen Grund für das Problem offenbaren würde.

Falls Du diese Zeile darin hast, weil Du eine Meldung kriegst wenn Unprotect
auf ein ungeschütztes Dokument ausgeführt wird, gehst Du besser so vor:

If ActiveDocument.ProtectionType <> wdNoProtection Then
ActiveDocument.Unprotect
End If
Obwohl ich mit ".unprotect" ausdrücklich den Dokumentschutz zuvor aufhebe,
erhalte ich die Fehlermeldung: Laufzeitfehler 4605 Die
CopyStylesFromTemplate-Methode ist nicht verfügbar, weil das Dokument
geschützt ist
Ich bin etwas verwirrt. Eine CopyStylesFromTemplate-Methode steht nicht in der
Prozedur, die Du uns zeigst? Der Dokumentschutz wird aufgehoben und sofort
wieder aktiviert...
Nach langer Zeit habe ich ein kleines Problem mit Dokumentschutz (Word97).
Von einem Makro wird ein Dokument (Tabelle) geschrieben. Am Ende des Codes
Sub DokuSchutz()
On Error Resume Next
ActiveDocument.Unprotect
ActiveDocument.Protect Password:="test", _
NoReset:=False, Type:=wdAllowOnlyFormFields
MsgBox "Du kannst das Formblatt jetzt ausdrucken!"
End Sub
Obwohl ich mit ".unprotect" ausdrücklich den Dokumentschutz zuvor aufhebe,
erhalte ich die Fehlermeldung: Laufzeitfehler 4605 Die
CopyStylesFromTemplate-Methode ist nicht verfügbar, weil das Dokument
geschützt ist.
Beim erneuten Makroaufruf tritt die Fehlermeldung nicht mehr auf, sondern
nur beim ersten Mal, nachdem Word97 geladen wurde.
Cindy Meister
Co-Autor von »Microsoft Word-Programmierung Das Handbuch« (MS Press)
http://www.word.mvps.org
http://homepage.swissonline.ch/cindymeister

Rückfragen & Antworten nur in der Newsgroup, bitte!
Dietmar Feuerer
2008-06-16 11:48:00 UTC
Permalink
Hallo,
erst mal Danke für eure Hilfe.
Post by Cindy M.
Mmmm. Als erstes sollst Du "On Error Resume Next" aus dem Code entfernen.
Diesen Code fügte ich nur in der Hoffnung ein, die Fehlermeldung zu
unterdrücken.
Post by Cindy M.
If ActiveDocument.ProtectionType <> wdNoProtection Then
ActiveDocument.Unprotect
End If
Nach Abänderung des Code bleibt es bei derselben Fehlermeldung. Ich hatte
den unprotect-Abfrage schon als Bedingung notiert wie es in der VBA-Hilfe
beschrieben ist.
Post by Cindy M.
Ich bin etwas verwirrt. Eine CopyStylesFromTemplate-Methode steht nicht in der
Prozedur, die Du uns zeigst? Der Dokumentschutz wird aufgehoben und sofort
wieder aktiviert...
In einem autoexec-makro kopiere ich alle Formatvorlagen von der Darlehen.dot
in die normal.dot, da ich sie in verschiedenen Textseite zur Formatierung
benötige. Dies geschieht aber, da sich die dot-Datei im Autostart-Ordner
befindet bereits beim Wordaufruf. Ich habe auch bei den anderen Texten mit
demselben Code einen Schreibschutz eingerichtet. Dort tritt die Fehlermeldung
nicht auf.

Option Explicit
Sub AutoExec()
Dim PfadA, PfadN
''Pfad zum Autostart-Ordner
PfadA = Options.DefaultFilePath(wdStartupPath)
''Pfad zum Vorlagen-Ordner
PfadN = Options.DefaultFilePath(wdUserTemplatesPath)

Application.OrganizerCopy _
Source:=PfadA & "\DarlJungFamilie.dot", _
Destination:=PfadN & "\Normal.dot", _
Name:="Darlehen11", _
Object:=wdOrganizerObjectStyles

Gruß,
Dietmar
Cindy M.
2008-06-16 15:34:14 UTC
Permalink
Hallo Dietmar,

Ich gebe zu: ich bin immer noch verwirrt. Vielleicht deshalb, weil Du uns immer
noch keine Zusammenhang zwischen den verschiedenen Teilen des Codes zeigt.
DokuSchutz wird im AutoExec nicht aufgerufen.

Es ist auch nicht klar, wieso bei jedem Neustart von Word die Formatvorlagen aus
einer (immer der gleichen) Dokumentvorlage in die Normal.dot kopiert werden.

Du bist Deinem Projekt viel näher - für Dich sind die Zusammenhänge und das
(gewünschte) Zusammenspiel klar. Für uns jedoch nicht...
Post by Cindy M.
Mmmm. Als erstes sollst Du "On Error Resume Next" aus dem Code entfernen.
Diesen Code fügte ich nur in der Hoffnung ein, die Fehlermeldung zu
unterdrücken.
Post by Cindy M.
If ActiveDocument.ProtectionType <> wdNoProtection Then
ActiveDocument.Unprotect
End If
Nach Abänderung des Code bleibt es bei derselben Fehlermeldung. Ich hatte
den unprotect-Abfrage schon als Bedingung notiert wie es in der VBA-Hilfe
beschrieben ist.
Post by Cindy M.
Ich bin etwas verwirrt. Eine CopyStylesFromTemplate-Methode steht nicht in der
Prozedur, die Du uns zeigst? Der Dokumentschutz wird aufgehoben und sofort
wieder aktiviert...
In einem autoexec-makro kopiere ich alle Formatvorlagen von der Darlehen.dot
in die normal.dot, da ich sie in verschiedenen Textseite zur Formatierung
benötige. Dies geschieht aber, da sich die dot-Datei im Autostart-Ordner
befindet bereits beim Wordaufruf. Ich habe auch bei den anderen Texten mit
demselben Code einen Schreibschutz eingerichtet. Dort tritt die Fehlermeldung
nicht auf.
Option Explicit
Sub AutoExec()
Dim PfadA, PfadN
''Pfad zum Autostart-Ordner
PfadA = Options.DefaultFilePath(wdStartupPath)
''Pfad zum Vorlagen-Ordner
PfadN = Options.DefaultFilePath(wdUserTemplatesPath)
Application.OrganizerCopy _
Source:=PfadA & "\DarlJungFamilie.dot", _
Destination:=PfadN & "\Normal.dot", _
Name:="Darlehen11", _
Object:=wdOrganizerObjectStyles
Cindy Meister
Co-Autor von »Microsoft Word-Programmierung Das Handbuch« (MS Press)
http://www.word.mvps.org
http://homepage.swissonline.ch/cindymeister

Rückfragen & Antworten nur in der Newsgroup, bitte!
Dietmar Feuerer
2008-06-18 07:45:00 UTC
Permalink
Hallo Cindy,

ich hoffe, ich kann es mit meinen bescheidenen Mitteln etwas erläutern.
Post by Cindy M.
Ich gebe zu: ich bin immer noch verwirrt. Vielleicht deshalb, weil Du uns immer
noch keine Zusammenhang zwischen den verschiedenen Teilen des Codes zeigt.
DokuSchutz wird im AutoExec nicht aufgerufen.
Nach der Struktur des Makros gibt es ein Auswahlfenster, von dem aus mehrere
Userforms aufgerufen werden können. Am Ende jeder Userform kommt der
Dokumentschutz, damit die Datei nicht mehr veränderbar ist. Im übrigen Code
gibt es keine Anweisung für Dokumentschutz. Die eigentliche dot-Vorlage
selbst ist schreibgeschützt, da sie auf einem Server liegt; ebenso ist der
VBA-Code mit einem Kennwort geschützt. Ich weiß leider nicht, wie ich das
Problem besser beschreiben soll. Wenn ich die Zeile mit dem Schreibschutz
auskommentiere, gibt es keine Fehlermeldung. Ebenso wenn das Dokument beim
zweiten Mal ausgedruckt werden soll.

Ich könnte dir das Makro oder nur den Code schicken, da die Ausgabe des
gesamten Codes hier den Rahmen sprengen würde.
Post by Cindy M.
Es ist auch nicht klar, wieso bei jedem Neustart von Word die Formatvorlagen aus
einer (immer der gleichen) Dokumentvorlage in die Normal.dot kopiert werden.
Ein neues Word97-Dokument basiert doch auf der normal.dot des jeweiligen PC;
dadurch, dass ich alle Formatvorlagen aus meiner dot-Datei beim Autostart in
die jeweilige normal.dot des PCs kopiere, will ich sicherstellen, dass die
vom Makro benötigten Formatvorlagen auch vorhanden sind.

Danke für die Hilfe,
Gruß
Dietmar
Cindy M.
2008-06-18 13:18:03 UTC
Permalink
Hi =?Utf-8?B?RGlldG1hciBGZXVlcmVy?=,
Post by Dietmar Feuerer
Post by Cindy M.
Ich gebe zu: ich bin immer noch verwirrt. Vielleicht
deshalb, weil Du uns immer
Post by Dietmar Feuerer
Post by Cindy M.
noch keine Zusammenhang zwischen den verschiedenen Teilen
des Codes zeigt.
Post by Dietmar Feuerer
Post by Cindy M.
DokuSchutz wird im AutoExec nicht aufgerufen.
Nach der Struktur des Makros gibt es ein Auswahlfenster, von
dem aus mehrere
Post by Dietmar Feuerer
Userforms aufgerufen werden können.
Wo sitzt dieses "Makro"? Wie/Wann wird es aufgerufen? Sind
alle Teile (es ist offensichtlich nicht ein einziges "Makro"
(Prozedur), sondern mehrere) in der gleichen Datei enthalten?
(Ich frage, weil Du mit "Application.Run" arbeitest.)
Post by Dietmar Feuerer
Am Ende jeder Userform kommt der
Dokumentschutz, damit die Datei nicht mehr veränderbar ist.
Mir ist weiterhin nicht klar, wieso diese Prozedur den
Dokumentschutz entfernt, und unmittelbar wieder herstellt. Das
macht keinen Sinn, und der Grund hierfür hast Du bislang nicht
klargestellt.
Post by Dietmar Feuerer
Ebenso wenn das Dokument beim
zweiten Mal ausgedruckt werden soll.
Vom Ausdruck hast Du uns auch noch keine Codezeile gezeigt. Es
ist wirklich schleierhaft, wie das alles zusammenhängt. Du
redst vom Ausdruck und zeigst Code für das Kopieren von
Formatvorlagen, und erwähnst eine Fehlermeldung wegen
Dokumentschutz, das im Code für die FV überhaupt nicht
aufgerufen wird...
Post by Dietmar Feuerer
Ich könnte dir das Makro oder nur den Code schicken,
Nein, danke. Ausser Du vorhast, mir dafür zu bezahlen.

Cindy Meister
Co-Autor von »Microsoft Word-Programmierung Das Handbuch« (MS
Press)
http://www.word.mvps.org
http://homepage.swissonline.ch/cindymeister

Rückfragen & Antworten nur in der Newsgroup, bitte!

Lesen Sie weiter auf narkive:
Loading...