Hallo Alex 1,
ein Makro in einem Dokument kann nur ausgeführt werden, wenn dieses geöffnet ist.
Deshalb die Frage:
ist das Modul in der Normal.dot oder in einem extra Document untergebracht ?
Bei deinem Makro muß mann, wie Lisa4 richtig bemerkt hat, darauf achten,
daß die Textmarke Datum vorhanden ist.
Nennen wir deinen Makro mal so, wie die Funktion ist.
Code:
Sub DatumVordatierenImKopfUndTextmarkDatum()
->Datum 1 Tag vordatieren
ActiveDocument.Sections(1).Headers(wdHeaderFooterPrimary).Range.InsertBefore _
Format((Date + 1), dddd, dd. MMMM yyyy)
On Error Resume Next
ActiveDocument.Bookmarks(Datum).Range.InsertBefore _
Format((Date + 1), dddd dd. MM. yyyy)
On Error GoTo 0
End Sub
Die Zeile mit->On Error Resume next' ist für den Fall, daß das aktive Dokument keine Textmarke->Datum' enthält. Fehlt die Textmarke, erzeugt der Makro eine Fehlermeldung. Mit->On Error Resume next' wird diese Fehlermeldung unterdrückt und der Makro fährt mit der nächsten Zeile fort.
Damit der Makro in allen Dokumenten verfügbar ist, schreiben wir ihn in die Normal.dot.
Das geht folgendermassen:
1) neu Word-Datei öffnen
2) VB-Editor öffnen Alt+F11
Links siehst Du ein Fenster mit der Überschrift Projekt-Project.
In diesem Fenster ist die Normal.dot unter dem Namen Normal zu finden.
3) Modul anlegen mit
3a) Normal mit der Maus selektieren
3b) rechte Maustaste -> Einfügen -> Modul
in der Mitte geht das Code-Fenster Normal-Modul1(Code) auf
3c) den gesamten Code per copy und Paste in dieses Fenster hineinkopieren
Mit Testen->komilieren kannst du noch testen, ob der Makro syntaktisch fehlerfrei ist
3d) Normal.dot speichern mit Alt+S
4) VB-Editor schliessen mit Alt+Q
So jetzt stellt sich die Frage:
bei welchem Ereignis soll der Makro aufgerufen werden?
- I) beim Öffnen eines bestimmten Dokuments
- II) beim Öffnen jedes bestehenden Dokuments
- III) beim Öffnen eines neuen Dokuments
zu I) beim Öffnen eines bestimmten Dokuments
angenommen das Dokument heißt Dok1.doc
Im Open-Ereignis des dieses Dokuments soll DatumVordatierenImKopfUndTextmarkDatum aufgerufen werden.
Vorgehen:
1) VB-Editor öffnen Alt+F11
Im Projekt-Fenster siehst Du Project(Dok1)
Die Pluszeichen anklicken, so daß die Ordner und Code-Seiten sichtbar werden.
2) Ein Doppelklick auf ThisDocument unterhalb von Project(Dok1)
in der Mitte geht das Code-Fenster Dok1-ThisDocument(Code) auf
3) folgenden Code in dieses Fenster kopieren:
Code:
Private Sub Document_Open()
On Error Resume Next
Call DatumVordatierenImKopfUndTextmarkDatum
End Sub
4) speichern mit Alt+S
5) VB-Editor schliessen mit Alt+Q
zu II) beim Öffnen jedes bestehenden Dokuments
Im Open-Ereignis eines jeden bestehenden Dokumentes soll DatumVordatierenImKopfUndTextmarkDatum aufgerufen werden.
Vorgehen:
1) VB-Editor öffnen Alt+F11
Im Projekt-Fenster siehst Du Normal.
Die Pluszeichen anklicken, so daß die Ordner und Code-Seiten sichtbar werden.
2) Ein Doppelklick auf Modul1 unterhalb von Normal
in der Mitte geht das Code-Fenster Normal-Modul1(Code) auf
3) folgenden Code in dieses Fenster kopieren:
Code:
Sub AutoOpen()
Call DatumVordatierenImKopfUndTextmarkDatum
End Sub
4) speichern mit Alt+S
5) VB-Editor schliessen mit Alt+Q
zu III) beim Öffnen eines neuen Dokuments
Im Open-Ereignis eines jeden neuen Dokumentes soll DatumVordatierenImKopfUndTextmarkDatum aufgerufen werden.
Vorgehen:
1) VB-Editor öffnen Alt+F11
Im Projekt-Fenster siehst Du Normal.
Die Pluszeichen anklicken, so daß die Ordner und Code-Seiten sichtbar werden.
2) Ein Doppelklick auf Modul1 unterhalb von Normal
in der Mitte geht das Code-Fenster Normal-Modul1(Code) auf
3) folgenden Code in dieses Fenster kopieren:
Code:
Sub AutoNew()
Call DatumVordatierenImKopfUndTextmarkDatum
End Sub
4) speichern mit Alt+S
5) VB-Editor schliessen mit Alt+Q
So, noch ein paar Hinweise:
- Wenn Methode I
und II benutzt werden, wird zunächst AutoOpen und dann Document_Open ausgeführt. Das Datum steht dann zweimal im Kopf.
- Wenn Methode I oder II benutzt werden, wird bei jedem Öffnen das Datum in den Kopf geschrieben.
Für Methode I besteht die Möglichkeit das aktivieren der Makros abzulehnen.
AutoOpen wird jedoch immer ausgeführt !
Gruß Matjes