Hallo Forum
ich versuche gerade eine Word Datei per VBA zu schützen.
(Ich übergebe aus Access dem Word einige Daten)
Ich kann das Word öffnen
den Schreibschutz mit
.ActiveDocument.Unprotect Password:="xxx" entfernen
Aber beim Schützen mit dem Code:
.ActiveDocument.Protect Password:="xxx", NoReset:=True, Type:=wdAllowOnlyReading, UseIRM:=False, EnforceStyleLock:=False -->funktioniert nicht
.ActiveDocument.CommandBars("Restrict Formatting and Editing").Visible = False --> funktioniert
.ActiveDocument.Save --> funktioniert
wird der Schutz nicht übernommen :-(
Hat jemand eine Idee?
Danke für Eure Hilfe
LG Friedrich
Hallo,
und was pssiert, wenn du NUR
.ActiveDocument.Protect Type:=wdAllowOnlyReading, Password:="xxx"
nimmst (in obiger Reihenfolge) und den restlichen Schweif an Parametern erstmal wegläßt?
Hallo Peter,
danke für deine Antwort
wenn ich den Befehl
.ActiveDocument.Protect Type:=wdAllowOnlyReading, Password:="xxx"
eingebe wird der Schutz auch nicht gesetzt. (ohne Fehlermeldung)
wenn ich nur
.ActiveDocument.Protect Password:="xxx"
eingebe
kommt die Fehlermeldung "Argument ist nicht optional"
wenn ich im Word das Makro schreibe und ausführe funktioniert der Schreibschutz (Word 2010) ....
LG Friedrich
Hallo,
Zitatwenn ich im Word das Makro schreibe und ausführe funktioniert der Schreibschutz
zeig doch mal den ganzen ACCESS-Code her, wie du das Word-Dok öffnest und die Daten einträgst.
Ist der Verweis auf die Word.xx Library fehlerfrei gesetzt?
Hallo,
anbei mein Code...
Private Sub iso_freigabe_Click()
Me.aktiv = True
Me.er_datum = Date
Me.rueckstufung = False
DoCmd.RefreshRecord
If Me.iso_freigabe = True Then
Dim wwobj As Object
Dim vorlage As String
Dim transnr As String
Dim transtitel As String
Dim transersteller As String
Dim transdatum As String
Dim transtyp As String
Dim transart As String
Dim transbereich As String
Dim docneu As String
Dim transrev As String
Dim transvorgabe As String
Dim transfreigabe As String
Dim FileInQuestion As String
Dim revision_a As String
Dim v_nr As String
v_nr = Forms!schulung_details_iso.Form!vorlagen_nr
revision_a = Forms!schulung_details_iso.Form!revision
transnr = Me!nr
transtitel = Me!titel
transersteller = Me!Text88
transdatum = Me!Text124
transtyp = Me!Text122
transart = Me!Text126
transbereich = Me!Text123
transfreigabe = "dfgdsfsdf"
transrev = Me!revision
transvorgabe = Me!vorlagen_nr
docneu = "G:\dokumente\" & v_nr & "_" & revision_a & ".doc"
'MsgBox docneu
Set objWord = CreateObject("Word.Application")
With objWord
'Make the application visible.
objWord.Visible = True
'Open the document.
objWord.Documents.Open (docneu)
.ActiveDocument.Unprotect Password:="xxx"
'Move to each bookmark and insert text from the form.
'Dim oRng As Word.Range
'Set oRng = .ActiveDocument.Bookmarks("Nr").Range
' oRng.Text = ActiveDocument.Bookmarks("Nr").Range.Text
' ActiveDocument.Bookmarks.Add "Nr", oRng
.ActiveDocument.Bookmarks("Nr").Select
.Selection.Text = CStr(transnr)
.ActiveDocument.Bookmarks.Add Name:="Nr", Range:=.Selection.Range
'.ActiveDocument.B("Nr").Range.InsertAfter transnr
.ActiveDocument.Bookmarks("Titel").Select
.Selection.Text = CStr(transtitel)
.ActiveDocument.Bookmarks.Add Name:="Titel", Range:=.Selection.Range
'.ActiveDocument.Bookmarks("Titel").Range.InsertAfter transtitel
.ActiveDocument.Bookmarks("Ersteller").Select
.Selection.Text = CStr(transersteller)
.ActiveDocument.Bookmarks.Add Name:="Ersteller", Range:=.Selection.Range
'.ActiveDocument.Bookmarks("Ersteller").Range.InsertAfter transersteller
.ActiveDocument.Bookmarks("Datum").Select
.Selection.Text = CStr(transdatum)
.ActiveDocument.Bookmarks.Add Name:="Datum", Range:=.Selection.Range
'.ActiveDocument.Bookmarks("Datum").Range.InsertAfter transdatum
.ActiveDocument.Bookmarks("Typ").Select
.Selection.Text = CStr(transtyp)
.ActiveDocument.Bookmarks.Add Name:="Typ", Range:=.Selection.Range
'.ActiveDocument.Bookmarks("Typ").Range.InsertAfter transtyp
.ActiveDocument.Bookmarks("Art").Select
.Selection.Text = CStr(transart)
.ActiveDocument.Bookmarks.Add Name:="Art", Range:=.Selection.Range
'.ActiveDocument.Bookmarks("Art").Range.InsertAfter transart
.ActiveDocument.Bookmarks("Bereich").Select
.Selection.Text = CStr(transbereich)
.ActiveDocument.Bookmarks.Add Name:="Bereich", Range:=.Selection.Range
'.ActiveDocument.Bookmarks("Bereich").Range.InsertAfter transbereich
.ActiveDocument.Bookmarks("Freigabe").Select
.Selection.Text = CStr(transfreigabe)
.ActiveDocument.Bookmarks.Add Name:="Freigabe", Range:=.Selection.Range
'.ActiveDocument.Bookmarks("Freigabe").Range.InsertAfter transfreigabe
.ActiveDocument.Bookmarks("Vorgabe").Select
.Selection.Text = CStr(transvorgabe)
.ActiveDocument.Bookmarks.Add Name:="Vorgabe", Range:=.Selection.Range
'.ActiveDocument.Bookmarks("Vorgabe").Range.InsertAfter transvorgabe
.ActiveDocument.Bookmarks("Revision").Select
.Selection.Text = CStr(transrev)
.ActiveDocument.Bookmarks.Add Name:="Revision", Range:=.Selection.Range
'.ActiveDocument.Bookmarks("Revision").Range.InsertAfter transrev
.ActiveDocument.Bookmarks("Dummy").Select
.Selection.Text = CStr("")
.ActiveDocument.Bookmarks.Add Name:="Dummy", Range:=.Selection.Range
'.ActiveDocument.Bookmarks("Dummy").Range.InsertAfter ("")
If .ActiveWindow.View.SplitSpecial <> wdPaneNone Then
.ActiveWindow.Panes(2).Close
.ActiveWindow.ActivePane.View.Type = 3
End If
If .ActiveWindow.ActivePane.View.Type = wdNormalView Or .ActiveWindow.ActivePane.View.Type = wdOutlineView Then
.ActiveWindow.ActivePane.View.Type = 3
End If
.ActiveWindow.ActivePane.View.SeekView = wdSeekCurrentPageHeader
If .ActiveWindow.View.SplitSpecial = wdPaneNone Then
.ActiveWindow.ActivePane.View.Type = 3
Else
.ActiveWindow.View.Type = 3
End If
.ActiveWindow.ActivePane.View.SeekView = wdSeekMainDocument
If .ActiveWindow.View.SplitSpecial = wdPaneNone Then
.ActiveWindow.ActivePane.View.Type = 3
Else
.ActiveWindow.View.Type = wdPrintView
.ActiveWindow.ActivePane.View.Type = 3
End If
.ActiveDocument.Protect Password:="xxx"
'objWord.Protect Password:="iso", NoReset:=False, Type:=wdAllowOnlyReading, UseIRM:=False, EnforceStyleLock:=False
.ActiveDocument.Save
' .ActiveDocument.SacveAs FileName:="docneu", WritePassword:="xxx"
End With
'´Wordobjekt leeren
Set wwobj = Nothing
Set objWord = Nothing
End If
Gruss Friedrich
Hallo,
ich habe den Code ausprobiert und nach folgender Änderung funktioniert die Passworteingabe bzw -speicherung
Verweis auf die Microsoft Word xx.0 Object Library gesetzt
Im VBA-Editor von Access unter Extra ---> Optionen solltest du unbedingt 'Variablendeklaration erforderlich' anhaken!
Schreib in den Modulkopf deines Moduls in die 2. Zeile Option Explicit ! (Bei neuen Modulen wird das nach dem Setzen der Variablendeklaration automatisch eingefügt)
Deklariere objWord - diese Objektvariable setzt du ein ohne sie deklariert zu haben!
Dim objWord As Object in den Deklarationsabschnitt deiner Routine!
Dort steht --- Dim wwobj As Object --- nur das Objekt wird im Code nirgends eingesetzt!
Dann habe ich ein neues Word-Dokument OHNE Passwort angelegt und die Zeile ...
.ActiveDocument.Unprotect Password:="xxx"
...auskommentiert
Den Code testweise mit F8 abgearbeitet
und das Dokument mit einem neuen Passwort gespeichert:
.ActiveDocument.Protect Password:="123", Type:=wdAllowOnlyReading
Danach diese Zeile ...
.ActiveDocument.Unprotect Password:="xxx"
... geändert auf ...
.ActiveDocument.Unprotect Password:="abc"
... die Zeile wieder aktiviert und den Code nochmals gestartet und mit F8 schrittweise abgearbeitet.
Der Vollständigkeit halber habe ich dann die Codezeile zum Speichern mit allen Optionen aktiviert und so getestet:
.ActiveDocument.Unprotect Password:="abc"
Dokument geändert und ....
.ActiveDocument.Protect Password:="iso", NoReset:=False, Type:=wdAllowOnlyReading, UseIRM:=False, EnforceStyleLock:=False
... mit dieserm Befehl ein neues Kennwort gesetzt, wobei ich objWord durch .ActiveDocument ersetzt habe!
Ergebnis:
Das Dokument wurde per Kennwort geöffnet es konnte ins Dokument geschrieben werden.
Das Dokument wurde mit einem neuen Kennwort gespeichert und war vor Schreibzugriff geschützt. ;)
HTH
Hallo,
leider funkt es bei mir noch immer nicht
ich habe nun die die Option Explicit eingefügt nun hat Access ein Problem mit der option Type:=wdAllowOnlyReading (Fehler beim Kompilieren Variable nicht definiert) ???
habe zum Probieren den Code gekürzt...
Private Sub Befehl159_Click()
Dim wordobj As Object
Set wordobj = CreateObject("Word.Application")
With wordobj
wordobj.Visible = True
wordobj.Documents.Open "g:\dokumente\1_3.doc"
.ActiveDocument.Unprotect Password:="iso"
.ActiveDocument.Protect Password:="iso", NoReset:=False, Type:=wdAllowOnlyReading, UseIRM:=False, EnforceStyleLock:=False
.ActiveDocument.Save
End With
Set wordobj = Nothing
End Sub
Danke für deine Hilfe
Gruss Friedrich
Hallo,
wenn die Konstante nicht erkannt wird, könnte:
a) der Word-Verweis nicht korrekt sein.
b) eine Wordversion in Verwendung sein, die diese Konstante nicht kennt.
Setz mal einen Haltepunkt an die Codezeile und überprüf den Wert (evtl. im Direktfenster mit ?wdAllowOnlyReading )
Ansonsten versuch:
.ActiveDocument.Protect wdAllowOnlyReading, False, "iso", False, False
bzw.:
.ActiveDocument.Protect 3, False, "iso", False, False
HAllo,
juhhuuu es funkt
die Zeile
.ActiveDocument.Protect 3, False, "iso", False, False
....hat zum Ziel geführt :) (muss man das Verstehen??)
1000 Dank an Franz und Peter
Lg
Friedrich
Hallo,
Zitatmuss man das Verstehen??
ja, der Grund dafür wurde doch schon mehrmals genannt: Der Verweis auf die Word-Library fehlt oder ist gebrochen..