VBA Dokumentenschutz aufheben Suchen Ersetzen Dokument schützen
Hi,
das Problem gab es 99% noch nicht im deutschsprachigen Internet bzw. wurde gelöst. Habe alles durchsucht.
Also folgendes:
1.) Mehrere Dateien in Unterverzeichnissen
2.) Dokumentenschutz aufheben (EDIT: Es ist kein Passwort vergeben)
3.) Suchen / Ersetzen (z.B. yyyyyyy mit XXXXXXX ersetzen)
4.) Dokument schützen (aber nur die Dokumente, die auch einen Dokumentenschutz hatten)
5.) Speichern unter Word 97 bis 2003 .doc
Wie gesagt, bin schon seit ein paar Tagen am Suchen und konnte nichts finden. Mittlerweile bin ich der Meinung dass das gar nicht geht... Naja, vielleicht gibt es ja einen Profi der das hibekommt. Habe Office 2007 und 2003 zur Verfügung
Vielen Dank im Voraus
Gruß Mo
das Problem gab es 99% noch nicht im deutschsprachigen Internet bzw. wurde gelöst. Habe alles durchsucht.
Also folgendes:
1.) Mehrere Dateien in Unterverzeichnissen
2.) Dokumentenschutz aufheben (EDIT: Es ist kein Passwort vergeben)
3.) Suchen / Ersetzen (z.B. yyyyyyy mit XXXXXXX ersetzen)
4.) Dokument schützen (aber nur die Dokumente, die auch einen Dokumentenschutz hatten)
5.) Speichern unter Word 97 bis 2003 .doc
Wie gesagt, bin schon seit ein paar Tagen am Suchen und konnte nichts finden. Mittlerweile bin ich der Meinung dass das gar nicht geht... Naja, vielleicht gibt es ja einen Profi der das hibekommt. Habe Office 2007 und 2003 zur Verfügung
Vielen Dank im Voraus
Gruß Mo
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 155358
Url: https://administrator.de/contentid/155358
Ausgedruckt am: 23.11.2024 um 16:11 Uhr
8 Kommentare
Neuester Kommentar
Moin cico77778,
willkommen im Forum.
Eines versteh ich nicht ganz - wenn du tagelang "am Suchen" warst, dann musst du doch zumindest Teil-Lösungen gefunden haben.
Oder eine Idee, ob du es mit mit VBA/word-Makros angehen willst oder als VBS-Schnipsel.
Wenn du aus welchen Gründen auch immer deine bereits vorhandenen Ansätze nicht mit einbringen magst, dann benenne doch die Punkte, an denen es jetzt klemmt.
Hast du denn die Suchen-Ersetzen-Mimik für ein Dokument fertig und die Dokumentenschutz-Deaktivier/Wieder-Aktiviermimik für ein Einzeldokument auch und es fehlt noch das rekursive Abklappern der Unterverzeichnisse oder umgekehrt...?
Oder hast du noch nie im Leben einen Makro aus der Nähe gesehen, aber gerade heute mittag nach dem Essen spontan die Idee gehabt, dir einen zum Copy&Pasten zu bestellen?
Oder wie sind die Rahmenbedingungen?
Grüße
Biber
willkommen im Forum.
Eines versteh ich nicht ganz - wenn du tagelang "am Suchen" warst, dann musst du doch zumindest Teil-Lösungen gefunden haben.
Oder eine Idee, ob du es mit mit VBA/word-Makros angehen willst oder als VBS-Schnipsel.
Wenn du aus welchen Gründen auch immer deine bereits vorhandenen Ansätze nicht mit einbringen magst, dann benenne doch die Punkte, an denen es jetzt klemmt.
Hast du denn die Suchen-Ersetzen-Mimik für ein Dokument fertig und die Dokumentenschutz-Deaktivier/Wieder-Aktiviermimik für ein Einzeldokument auch und es fehlt noch das rekursive Abklappern der Unterverzeichnisse oder umgekehrt...?
Oder hast du noch nie im Leben einen Makro aus der Nähe gesehen, aber gerade heute mittag nach dem Essen spontan die Idee gehabt, dir einen zum Copy&Pasten zu bestellen?
Oder wie sind die Rahmenbedingungen?
Grüße
Biber
Hallo cico77778,
ein Willkommen auch von mir.
Mal abgesehen von erstens sollte alles machbar sein sofern du keine utopischen Vorstellungen hast. Bei erstens muss ich sagen hab ich im mom keinen Plan was du damit meinst.
Es wäre blos sehr gut, wenn du uns wie Biber schon sagte mehr Infos geben könntest.
Wird zum Beispiel das Dokument nach einem bestimmten Wort durchsucht oder nach variablen Wörtern. Und ähnliche Dinge wären sehr interessant zu wissen, es würde eine Menge Zeit ersparen.
Zum Thema Internet suche kann ich nur sagen, dass zwei nicht gerade unbekannte Suchmaschinen herliche Ergebnise für alle gennanten Bereiche ausspucken. Mit etwas geschick kann man dann ohne Probleme alles zu einem Makro zusammen basteln.
Gruß
duffman521
ein Willkommen auch von mir.
Mal abgesehen von erstens sollte alles machbar sein sofern du keine utopischen Vorstellungen hast. Bei erstens muss ich sagen hab ich im mom keinen Plan was du damit meinst.
Es wäre blos sehr gut, wenn du uns wie Biber schon sagte mehr Infos geben könntest.
Wird zum Beispiel das Dokument nach einem bestimmten Wort durchsucht oder nach variablen Wörtern. Und ähnliche Dinge wären sehr interessant zu wissen, es würde eine Menge Zeit ersparen.
Zum Thema Internet suche kann ich nur sagen, dass zwei nicht gerade unbekannte Suchmaschinen herliche Ergebnise für alle gennanten Bereiche ausspucken. Mit etwas geschick kann man dann ohne Probleme alles zu einem Makro zusammen basteln.
Gruß
duffman521
Hallo Mo!
Mit Word-VBA beschäftige ich mich eher weniger, aber die Punkte 1-5 sollten mit diesem Code funktionieren:
Schritt1: Alle Dokumente schließen und den Quellcode im VB-Editor in ein Modul kopieren (Normal)
Schritt2: Die Konstante StartFolder entsprechend anpassen
Schritt3: Die Konstante SaveFormat entsprechend anpassen
Ablauf:
1. Wird geprüft, ob Documente geöffnet sind. Wenn ja, wird eine Fehlermeldung ausgegeben und die Aktion abgebrochen.
2. Wird ein Dialog zum auswählen des Start-Ordners angezeigt. Bei Abbruch wird die Aktion abgebrochen.
3. Wird eine Eingabe der Such- und Ersetzenbegriffe gefordert, wobei der Such- und Ersetzenbegriff durch ein Komma getrennt und weitere Such- und Ersetzenbegriffe durch ein Semikolon getrennt werden z.B. "Suchen1,Ersetzen1;Suchen2,Ersetzen2;..." (Beispiel wird per Default angezeigt). Bei Leer oder Abbruch, wird die Aktion abgebrochen.
4. Wird die Word-SearchFile-Funktion durch eine andere Such-Funktion ersetzt, da diese in den neueren Word-Versionen nicht mehr zur Verfügung steht.
5. Sind Dokumente schreibgeschützt, wird eine Fehlermeldung mit Pfad-Angabe der jeweiligen Datei ausgegeben.
6. Ist unerheblich, ob sich Dateien mit/ohne Dokument-Schutz in einem Verzeichnis befinden. Gechützte Dateien werden mit dem gleichen Schutz gespeichert, der beim Öffnen vorhanden war.
Das ganze sollte natürlich erst in einem Test-Verzeichnis getetet werden
Gruß Dieter
Mit Word-VBA beschäftige ich mich eher weniger, aber die Punkte 1-5 sollten mit diesem Code funktionieren:
Option Explicit
Const StartFolder = "E:\Test\Docs\" 'Dialog-Startverzeichnis
Const SaveFormat = 107 'DateiFormat W97-W2002 (W97-W2003 = ???)
Const Inp1 = "Bitte Such- und Ersetzenbegriffe eingeben:"
Const Mld1 = "Suchen und Ersetzen..."
Const Msg1 = "Bei dieser Aktion dürfen keine Dokumente geöffnet sein!"
Const Msg2 = "Der Vorgang wurde wegen fehlender Eingabe abgebrochen!"
Const Msg3 = "Die Bearbeitung der Dokumente ist abgeschlossen."
Const Msg4 = "Die Datei: %1" & vbCr & "ist schreibgeschützt und kann nicht bearbeitet werden!"
Dim Fso As Object, ReplaceList As Variant
Sub SearchAndReplace()
Dim Path As String
If Documents.Count Then MsgBox Msg1, vbExclamation, "Fehler": Exit Sub
With Application.FileDialog(msoFileDialogFolderPicker)
.Title = "Verzeichnis auswählen..."
.InitialFileName = StartFolder
If .Show = False Then Exit Sub
Path = .SelectedItems(1)
End With
ReplaceList = Split(InputBox(Inp1, Mld1, "Suchen1,Ersetzen1;Suchen2,Ersetzen2"), ";")
If UBound(ReplaceList) < 0 Then MsgBox Msg2, vbInformation, Mld1: Exit Sub
Set Fso = CreateObject("Scripting.FileSystemObject")
Call SearchDocFiles(Fso.GetFolder(Path))
MsgBox Msg3, vbInformation, Mld1
End Sub
Private Sub SearchDocFiles(ByRef Folder)
Dim File As Object, SubFolder As Object
For Each File In Folder.Files
If LCase(Fso.GetExtensionName(File.Name)) = "doc" Then
Call EditAndSaveDocFile(File.Path)
End If
Next
For Each SubFolder In Folder.SubFolders
Call SearchDocFiles(SubFolder)
Next
End Sub
Private Sub EditAndSaveDocFile(ByRef File)
Dim ProtectType As Long, Text As Variant, i As Integer
With Documents.Open(File)
If .ReadOnly = True Then
MsgBox Replace(Msg4, "%1", .FullName), vbExclamation, "Fehler": .Close: Exit Sub
End If
ProtectType = .ProtectionType
If ProtectType <> wdNoProtection Then .Unprotect
For i = 0 To UBound(ReplaceList)
Text = Split(ReplaceList(i), ",")
If UBound(Text) = 1 Then
With .Range(Start:=0, End:=0).Find
.ClearFormatting
.Text = Text(0)
.Replacement.ClearFormatting
.Replacement.Text = Text(1)
.Execute Replace:=wdReplaceAll
End With
End If
Next
If ProtectType <> wdNoProtection Then .Protect Type:=ProtectType, NoReset:=True
Application.DisplayAlerts = wdAlertsNone
.SaveAs FileName:=File, FileFormat:=SaveFormat, AddToRecentFiles:=False: .Close
Application.DisplayAlerts = wdAlertsAll
End With
End Sub
Schritt1: Alle Dokumente schließen und den Quellcode im VB-Editor in ein Modul kopieren (Normal)
Schritt2: Die Konstante StartFolder entsprechend anpassen
Schritt3: Die Konstante SaveFormat entsprechend anpassen
Ablauf:
1. Wird geprüft, ob Documente geöffnet sind. Wenn ja, wird eine Fehlermeldung ausgegeben und die Aktion abgebrochen.
2. Wird ein Dialog zum auswählen des Start-Ordners angezeigt. Bei Abbruch wird die Aktion abgebrochen.
3. Wird eine Eingabe der Such- und Ersetzenbegriffe gefordert, wobei der Such- und Ersetzenbegriff durch ein Komma getrennt und weitere Such- und Ersetzenbegriffe durch ein Semikolon getrennt werden z.B. "Suchen1,Ersetzen1;Suchen2,Ersetzen2;..." (Beispiel wird per Default angezeigt). Bei Leer oder Abbruch, wird die Aktion abgebrochen.
4. Wird die Word-SearchFile-Funktion durch eine andere Such-Funktion ersetzt, da diese in den neueren Word-Versionen nicht mehr zur Verfügung steht.
5. Sind Dokumente schreibgeschützt, wird eine Fehlermeldung mit Pfad-Angabe der jeweiligen Datei ausgegeben.
6. Ist unerheblich, ob sich Dateien mit/ohne Dokument-Schutz in einem Verzeichnis befinden. Gechützte Dateien werden mit dem gleichen Schutz gespeichert, der beim Öffnen vorhanden war.
Das ganze sollte natürlich erst in einem Test-Verzeichnis getetet werden
Gruß Dieter
Hallo Dieter (@76109)
funktioniert das auch unter Word 2013?
Ich habe da nämlich auch ein paar Unterordner mit Dateien, die einen Dokumentenschutz haben,
ich bin aber nicht der große Makroheld und traue mir nicht zu, das ohne Unterstützung zu ändern.
Das Programm, mit dem ich arbeite, ist wie gesagt Word 2013, die vorliegenden Dateien sind aber Word 2003 (*.dot) und ganz wenige Word 2007 und neuer (*.dotx) um es genau zu sagen, weil die Branchensoftware stabil die *.dot aufrufen kann, während die *.dotx nicht getestet ist, bzw. nur zum Teil.
Die Dateien, die vorher *.dot waren, müssen hinterher auch wieder *.dot Dateien sein und die *.dotx-Dateien müssen hinterher wieder dotx-Dateien sein.
Grund für die Aktion: wir müssen in gefühlten 300 bis 500 Vorlagen Einträge suchen und z. Teil löschen (Hinweis auf Jobbörse.) und zum Teil ersetzen (Revisionsstand in Fußzeile und Änderung des Brandings (Ein Unternehmen der <Firmenname>. wird a brand of <Firmenname>).
Einen großen Teil können wir zwar in den Filial- und Mandantendaten unserer Branchensoftware anpassen, dann bleibt aber immer noch der Hinweis auf die Jobbörse und die Anpassung des Revisonsstandes in der Word-Fußzeile.
Ich würde gern dein Makro testen, weiß aber nicht, wie ich es anpasse, damit auch das herauskommt, was ich haben will.
Ich habe hier noch einen Code, der zwar ohne Fehler durchläuft, aber den Dokumentenschutz nicht aufhebt.
Sub SetPassword()
Const AktPasswd = "test" 'das Originalpasswort ist mir bekannt
Dim varVerzeichnis As String
Dim strDatei As String
Dim wdDoc As Word.Document
With Application.FileDialog(msoFileDialogFolderPicker)
.AllowMultiSelect = False 'evt. rausnehmen, oder kann ich das auf True setzen, damit ich die Ordner auswählen kann, die es betrifft? Eine Kopie der Dateien habe ich gemacht
If .Show = -1 Then
Application.ScreenUpdating = False
varVerzeichnis = .SelectedItems(1)
strDatei = Dir(varVerzeichnis & Application.PathSeparator & "*.doc") 'hier müsste ich dot oder dotx auswählen können
While strDatei <> ""
If LCase(strDatei) <> LCase(ThisDocument.Name) Then
Set wdDoc = Documents.Open(varVerzeichnis & "\" & strDatei)
With wdDoc
If .ProtectionType <> wdNoProtection Then
'wenn geschützt, dann Schutz aufheben
.Unprotect Password:=AktPasswd
End If
.ReadOnlyRecommended = False
.Password = "" 'Passwort zurücksetzen
.WritePassword = "" 'Passwort zurücksetzen. Reicht einmal zurücksetzen?
.RemovePersonalInformation = False
.RemoveDateAndTime = False
.Close savechanges:=wdSaveChanges 'Datei speichern und schließen
End With
End If
strDatei = Dir
Wend
Application.ScreenUpdating = True
End If
End With
MsgBox "Fertig"
Set wdDoc = Nothing
End Sub
Das würde mir bereits genügen, ich habe ein Tool für suchen und ersetzen.
Wenn die Version von dir allerdings auch unter Word 2013 funktionieren würde, wäre das auch nicht schlecht. Ich würde das Makro dann sowieso mehrfach durchlaufen lassen, damit ich alle Bereiche erfasse.
Kann man auch eine Ergebnisliste erstellen, was gefunden wurde, bevor man ersetzt? bzw. kann man wählen, zwischen suchen und ersetzen?
Für eine Hilfe wäre ich sehr dankbar.
MfG
Andrea
funktioniert das auch unter Word 2013?
Ich habe da nämlich auch ein paar Unterordner mit Dateien, die einen Dokumentenschutz haben,
ich bin aber nicht der große Makroheld und traue mir nicht zu, das ohne Unterstützung zu ändern.
Das Programm, mit dem ich arbeite, ist wie gesagt Word 2013, die vorliegenden Dateien sind aber Word 2003 (*.dot) und ganz wenige Word 2007 und neuer (*.dotx) um es genau zu sagen, weil die Branchensoftware stabil die *.dot aufrufen kann, während die *.dotx nicht getestet ist, bzw. nur zum Teil.
Die Dateien, die vorher *.dot waren, müssen hinterher auch wieder *.dot Dateien sein und die *.dotx-Dateien müssen hinterher wieder dotx-Dateien sein.
Grund für die Aktion: wir müssen in gefühlten 300 bis 500 Vorlagen Einträge suchen und z. Teil löschen (Hinweis auf Jobbörse.) und zum Teil ersetzen (Revisionsstand in Fußzeile und Änderung des Brandings (Ein Unternehmen der <Firmenname>. wird a brand of <Firmenname>).
Einen großen Teil können wir zwar in den Filial- und Mandantendaten unserer Branchensoftware anpassen, dann bleibt aber immer noch der Hinweis auf die Jobbörse und die Anpassung des Revisonsstandes in der Word-Fußzeile.
Ich würde gern dein Makro testen, weiß aber nicht, wie ich es anpasse, damit auch das herauskommt, was ich haben will.
Ich habe hier noch einen Code, der zwar ohne Fehler durchläuft, aber den Dokumentenschutz nicht aufhebt.
Sub SetPassword()
Const AktPasswd = "test" 'das Originalpasswort ist mir bekannt
Dim varVerzeichnis As String
Dim strDatei As String
Dim wdDoc As Word.Document
With Application.FileDialog(msoFileDialogFolderPicker)
.AllowMultiSelect = False 'evt. rausnehmen, oder kann ich das auf True setzen, damit ich die Ordner auswählen kann, die es betrifft? Eine Kopie der Dateien habe ich gemacht
If .Show = -1 Then
Application.ScreenUpdating = False
varVerzeichnis = .SelectedItems(1)
strDatei = Dir(varVerzeichnis & Application.PathSeparator & "*.doc") 'hier müsste ich dot oder dotx auswählen können
While strDatei <> ""
If LCase(strDatei) <> LCase(ThisDocument.Name) Then
Set wdDoc = Documents.Open(varVerzeichnis & "\" & strDatei)
With wdDoc
If .ProtectionType <> wdNoProtection Then
'wenn geschützt, dann Schutz aufheben
.Unprotect Password:=AktPasswd
End If
.ReadOnlyRecommended = False
.Password = "" 'Passwort zurücksetzen
.WritePassword = "" 'Passwort zurücksetzen. Reicht einmal zurücksetzen?
.RemovePersonalInformation = False
.RemoveDateAndTime = False
.Close savechanges:=wdSaveChanges 'Datei speichern und schließen
End With
End If
strDatei = Dir
Wend
Application.ScreenUpdating = True
End If
End With
MsgBox "Fertig"
Set wdDoc = Nothing
End Sub
Das würde mir bereits genügen, ich habe ein Tool für suchen und ersetzen.
Wenn die Version von dir allerdings auch unter Word 2013 funktionieren würde, wäre das auch nicht schlecht. Ich würde das Makro dann sowieso mehrfach durchlaufen lassen, damit ich alle Bereiche erfasse.
Kann man auch eine Ergebnisliste erstellen, was gefunden wurde, bevor man ersetzt? bzw. kann man wählen, zwischen suchen und ersetzen?
Für eine Hilfe wäre ich sehr dankbar.
MfG
Andrea