Office Forum
www.Office-Loesung.de
Access :: Excel :: Outlook :: PowerPoint :: Word :: Office :: Wieder Online ---> provisorisches Office Forum <-
Makro tauschen
zurück: höchsten Dateinamen aus Ordner übernehmen weiter: Zahlen im Text suchen, umrechen und ersetzen Unbeantwortete Beiträge anzeigen
Neues Thema eröffnen   Neue Antwort erstellen     Status: Antwort Facebook-Likes Diese Seite Freunden empfehlen
Zu Browser-Favoriten hinzufügen
Autor Nachricht
Matthi79
Im Profil kannst Du frei den Rang ändern


Verfasst am:
24. Nov 2006, 10:19
Rufname:

Makro tauschen - Makro tauschen

Nach oben
       Version: Office 2k (2000)

Hallo, hoffe Ihr könnt mir weiterhelfen. Bin schon fast am verzweifeln.

Folgende Ausgangsposition:

Ich stelle unseren Kunden Word-Dokumente über das Internet bereit, welche Sie nur auf unserem Server speichern können.
Die Speicherung wird mittels eines Makros vollzogen. Ändert sich was an der Speicherroutine muss ich natürlich alle 500 Dokumente
per Hand nachziehen. Das ist langsam echt nicht mehr lustig Sad


Nun hab ich mir überlegt die Makros dynamisch zu tauschen. Dafür habe ich eine Funktion geschrieben,
welche alle Dokumente einzeln einliest und das vorhandene Makro löscht(remove) und danach ein Makro
aus einer .bas als Modul einfügt (import).


Ordnerinhalt (C:\Testpfad):
Dokument1.doc
Dokument2.doc
Dokument3.doc
etc.
Alle Dokumente sind per Kennwort geschützt (Gesetzt auf VBE:--> Eigenschaften von ... --> Schutz )


Quellcode:



'#######################################################################################################################'
'#######################################################################################################################'

Dim codeModul As Object 'VBComponent
Dim pfad As String
Dim modulName As String
Dim speichername As String
Dim AlterName As String
Dim Neuername As String
Dim originalname As String
pfad = "C:\Testpfad"
Dim name_neu1 As String

modul_entfernt = False


'einlesen der umzuwandelnden Dokumente
Dim fs As Object, myFolder As Object, fl As Object
Set fs = CreateObject("Scripting.FileSystemObject")
Set myFolder = fs.GetFolder(pfad)
modulName = "modul_import"

Dim fs1 As Object, fl1 As Object


For Each fl In myFolder.Files
If Right(fl.Name, 4) = ".doc" And Left(fl.Name, 1) = "D" Then
'Original öffnen
Dim nDoc As Document '211106 Wichtig!
Documents.Add (fl.Path)

'Original als active setzen
Set nDoc = ActiveDocument
nDoc.Activate


'########## das hier will absolut nicht gehen ########################################'
'#####################################################################################'
'Prüfen, ob das Dokument schreibgeschützt ist
If nDoc.ProtectionType >= 0 Then
nDoc.Unprotect "DasPassword"
Else
nDoc.Protect Type:=wdAllowOnlyFormFields, NoReset:=True, Password:="DasPassword"
End If
'###########################################'
'###########################################'

'nun prüfen, ob das Modul im aktuellen Dokument bereits vorhanden ist, wenn ja dann lösche es
For Each Module In nDoc.VBProject.VBComponents
If Module.Name = modulName Then
'Modul entfernen
Set codeModul = nDoc.VBProject.VBComponents(modulName)
nDoc.VBProject.VBComponents.Remove codeModul
'MsgBox ("modul entfernt")
End If
Next
'importieren des neuen Moduls
nDoc.VBProject.VBComponents.import pfad & "\" & modulName & ".bas"
'umbenennen des neuen Moduls in einen eindeutigen Namen, damit beim nächsten Update nach dem
'alten Modul gesucht werden kann. standardmäßig heißen neu importierte Module einfach 'modul'
'da dieser namen aber nicht eindeutig ist, muss er hier geändert werden
nDoc.VBProject.VBComponents("Modul1").Name = modulName
nDoc.Saved = True

'Originalname des zu ersetzenden Dokumentes
originalname = fl.Path
speichername = pfad & "\temp_" & fl.Name

'neu erstelltes Dokument als temp speichern
nDoc.SaveAs (speichername)
'geänderte Dokument schliessen
nDoc.Close


'ich speichere einfach die alte Datei unter einem mit einem Zeitstempel versehenen Namen ab und kann dann die Temp in den
'Namen des Originaldokumentes ändern
Set fs1 = CreateObject("Scripting.FileSystemObject")
For Each fl1 In myFolder.Files
If fl1.Path = originalname Then
'original mit umsetzdatum versehen
name_neu1 = ""
name_neu1 = pfad & "\" & Day(Date) & Month(Date) & Year(Date) & "_" & Hour(Time) & "" & Minute(Time) & "_" & fl.Name

AlterName = pfad & "\" & fl.Name: Neuername = name_neu1
Name AlterName As Neuername
'nun die temp-Datei in den originalnamen umbenennen,
'dadurch wird die Änderung am
'Makro aktiv
AlterName = speichername: Neuername = originalname
Name AlterName As Neuername
End If
Next
Set nDoc = Nothing
'nun nächstes Dokument updaten

End If
DoEvents
Next fl
MsgBox (erfolgreich_geupdatet)

ThisDocument.Saved = True


End Sub

'#######################################'
'#######################################'

Das funktioniert, solange die Dateien nicht schreibgeschützt sind.


1. Problem: Ich krieg den Schreib- bzw. Projektschutz des aktuellen Dokumentes irgendwie nicht raus.
Sind die Dokumente schreibgeschützt, dann meldet er IMMER an der Stelle
*For Each Module In nDoc.VBProject.VBComponents* das das Dokument schreibgeschützt ist.


2. Problem: Ich müßte in allen Dokumenten per VBA im ThisDocument-Teil eine Call-Funktion einbauen, weiss aber nicht wie.
(kann man per VBA auf das ThisDocument-Formular überhaupt zugreifen???)

in den alten Dokumenten steht im ThisDocument-Editor:

Private Sub Document_Open()
...blablalba
End Sub

--> Daraus muss ich bei jedem einzelnen Dokument per Routine irgendwie

Private Sub Document_Open()
'Aufruf einer Funktion des neuen Moduls
call Ausfuehrung
End Sub

einfügen. Geht sowas?


Ich hoffe Ihr könnt mir weiterhelfen, dann wirds Weihnachtsfest auch dieses Jahr wieder schön Smile .
rita2008
Im Profil kannst Du frei den Rang ändern


Verfasst am:
24. Nov 2006, 17:22
Rufname:
Wohnort: Berlin


AW: Makro tauschen - AW: Makro tauschen

Nach oben
       Version: Office 2k (2000)

1. Den Projektschutz kann man wohl absichtlich nicht per VBA aushebeln, das würde ja Virenprogrammen alle Tore öffnen.
Man kann den Projektschutz über Extras/Makro/Sicherheit/"Trusted Publishers" entfernen.

2. Auf "ThisDocument" müsstest Du doch wie auf die anderen Moduln mit

Code:
nDoc.VBProject.VBComponents("ThisDocument").CodeModule


zugreifen können. Dort kannst Du dann mit procStartLine() die Anfangszeile der Prozedur bestimmen, mit DeleteLines() den alten code löschen und mit AddFromString() neuen Text einfügen.

(Vorausgsetzt, Du findest eine Methode, an den Code zu kommen)

_________________
mfg Rita

Antworten bitte hier im Forum, nicht als private Nachricht. Danke
Matthi79
Im Profil kannst Du frei den Rang ändern


Verfasst am:
24. Nov 2006, 17:52
Rufname:

AW: Makro tauschen - AW: Makro tauschen

Nach oben
       Version: Office 2k (2000)

Erst mal danke für die Antwort.

Also deinen 1. Lösungsversuch verstehe ich nicht ganz.
Alle Dokument liegen local bei mir, unter Makros/Sicherheit/vertrauenswürdige Quellen ist *Zugriff auf Visual-Basic-Project vertrauen* aktiviert.
Ich müßte den Projectschutz doch per VBA aufheben können (mit nDoc.Unprotect PAssword:="vxcvxcvcv") . Wenn ich jedoch nach dem Documents.Add und der (nicht funktionierenden) Unprotect-Routine auf das neue Dokument klicke kommt die Passwortabfrage.

2. Muss ich erst ausprobieren, hört sich aber vielversprechend an.
rita2008
Im Profil kannst Du frei den Rang ändern


Verfasst am:
24. Nov 2006, 18:00
Rufname:
Wohnort: Berlin

AW: Makro tauschen - AW: Makro tauschen

Nach oben
       Version: Office 2k (2000)

Zitat:
Ich müßte den Projectschutz doch per VBA aufheben können (mit nDoc.Unprotect PAssword:="vxcvxcvcv")


Das betrifft nur den Dokumentschutz, nicht den VBA-Projektschutz. Wie gesagt: da könnte jeder von außen beliebigen Code einschmuggeln.
Und Microsoft macht es wohl so sicher, dass bei neuen Dokumenten generell der projektschutz gesetzt ist.

_________________
mfg Rita

Antworten bitte hier im Forum, nicht als private Nachricht. Danke
Matthi97
Gast


Verfasst am:
24. Nov 2006, 18:22
Rufname:

AW: Makro tauschen - AW: Makro tauschen

Nach oben
       Version: Office 2k (2000)

ok, ich werd mir am Weekend mal den Kopf zerbrechen, danke im Vorraus.
Matthi79
Im Profil kannst Du frei den Rang ändern


Verfasst am:
26. Nov 2006, 11:12
Rufname:

AW: Makro tauschen - AW: Makro tauschen

Nach oben
       Version: Office 2k (2000)

So, ich habe maln bisschen gebastelt. Also das mit dem procStartline warn Volltreffer, recht herzlichen Dank.

Nun stehe ich trotzdem noch vor dem Problem, dass ich den sch... Projektschutz nicht aufheben kann, ich habe aber das PAsswort, das ist ja das merkwürdige.jemand ne Idee?
rita2008
Im Profil kannst Du frei den Rang ändern


Verfasst am:
26. Nov 2006, 18:16
Rufname:
Wohnort: Berlin


AW: Makro tauschen - AW: Makro tauschen

Nach oben
       Version: Office 2k (2000)

zum 3. Mal: mit dem Passwort kannst Du den Dokumentschutz aufheben, mit dem Projektschutz, also dem Schutz des Codes vor Veränderungen von außen, hat das Passwort nichts zu tun.
_________________
mfg Rita

Antworten bitte hier im Forum, nicht als private Nachricht. Danke
Neues Thema eröffnen   Neue Antwort erstellen Alle Zeiten sind
GMT + 1 Stunde

Diese Seite Freunden empfehlen

Seite 1 von 1
Gehe zu:  
Du kannst Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum nicht posten
Du kannst Dateien in diesem Forum herunterladen

Verwandte Themen
Forum / Themen   Antworten   Autor   Aufrufe   Letzter Beitrag 
Keine neuen Beiträge Word Serienbriefe: Einbinden Textmarken und Makro aus DOT-Datei in Serienbrief 0 hurganator 690 21. Feb 2012, 10:36
hurganator Einbinden Textmarken und Makro aus DOT-Datei in Serienbrief
Keine neuen Beiträge Word Formate: Formatvorlagen suchen und ersetzen mit Makro 8 zausel 4043 09. Jan 2011, 18:09
elukas Formatvorlagen suchen und ersetzen mit Makro
Keine neuen Beiträge Word Formate: Spalten tauschen 3 YuGiH 1500 27. Nov 2006, 19:06
Hübi Spalten tauschen
Keine neuen Beiträge Word Formate: Word Formatvorlagen per Makro ändern 4 NightFog 6551 29. Jun 2005, 19:01
NightFog Word Formatvorlagen per Makro ändern
Keine neuen Beiträge Word VBA Programmierung (Makros): Suchen, Ersetzen per Makro 2 Python 1305 21. Apr 2005, 13:04
Python Suchen, Ersetzen per Makro
Keine neuen Beiträge Word VBA Programmierung (Makros): Fett gedruckt im Word Makro 3 addae 1391 07. Apr 2005, 18:42
Betty2004 Fett gedruckt im Word Makro
Keine neuen Beiträge Word VBA Programmierung (Makros): Makro beim Start ausführen? 3 Gast 7567 21. März 2005, 17:05
Drumatiker Makro beim Start ausführen?
Keine neuen Beiträge Word VBA Programmierung (Makros): Per Makro duplex drucken! - W97 3 Der Zivi 6352 03. März 2005, 15:35
Der Klaus Per Makro duplex drucken! - W97
Keine neuen Beiträge Word VBA Programmierung (Makros): Makro / VBA für Inhalte einfügen/Als Grafik(WMF) 2 CaBe 4949 13. Feb 2005, 19:01
CaBe Makro / VBA für Inhalte einfügen/Als Grafik(WMF)
Keine neuen Beiträge Word VBA Programmierung (Makros): Makro für Anfänger 1 Gast 4633 19. Jan 2005, 10:58
tessi Makro für Anfänger
Keine neuen Beiträge Word VBA Programmierung (Makros): Makro für Druckeinstellungen 1 HJP 2907 19. Dez 2004, 17:05
Günny Makro für Druckeinstellungen
Keine neuen Beiträge Word VBA Programmierung (Makros): mit Makro verknüpfte Dokumentvorlage nach Word 2003 migrier 1 Karl Heinz 1008 06. Dez 2004, 01:51
Lisa mit Makro verknüpfte Dokumentvorlage nach Word 2003 migrier
 

----> Diese Seite Freunden empfehlen <------ Impressum - Besuchen Sie auch: Microsoft-Excel Diagramme