Hallo Markus,
ich weiß gar nicht so genau, wo ich beginnen soll :-(
Ich versuche mich mal so weit wie möglich an die Reihenfolge Deiner Ausführungen zu halten.
In einem Word 2007 habe ich eine Datei geöffnet, in der ein Makro nach dem Öffnen dieser Datei automatisch gestartet wird.
dazu nehme ich diesen Abschnitt vom Ende.
Meine wichtigste Frage ist allerdings, wie ich es hinbiegen kann, dass das Makro auch in einem anderen Office 2007 oder 2003 funktioniert. Nehme ich nämlich die Datei und öffne ich sie in einem anderen Office 2007 oder 2003, sind die Makros gar nicht vorhanden? Wie nehme ich also die Makros mit?
Automatisch startende Makros, die man auch noch mit Dokumenten mitnimmt, sind eine gefährliche Sache. Genau aus diesem Grund lösten in der zweiten Hälfte der 90er des letzten Jahrhunderts Makroviren (vor allem Word und Excel) die vorher so beliebten Bootsektorviren an der Spitze der Häufigkeitsskala ab. Denke daran, dass solche Makros alles das dürfen, was der Benutzer auch darf. Dazu zählt auch das Verändern und Löschen von Dateien. Der Code zur Selbstvervielfältigung des Codemoduls passt in etwa 10 Zeilen.
Daher gibt es inzwischen die Sicherheitseinstellungen, die standardmäßig das Ausführen von Code deaktivieren, mit dem Erfolg, dass Makroviren an Bedeutung dramatisch verloren haben.
Dabei bin ich so vorgegangen, dass ich in Word 2007 auf die Makroeinstellungen klickte, und mit dem Button "Bearbeiten" den VB-Editor öffnete.
Unter "Normal" ist folgendes im Editor eingetragen:
Kommen wir zum nächsten Teil. Word-Dokumente basieren *grundsätzlich* auf Vorlagen. Die Standardvorlage von Word hieß NORMAL.DOT, seit Word 2007 heißt sie NORMAL.DOTM. Diese Vorlage wird beim Starten von Word automatisch geöffnet. Diese Information findest Du in der Word-Hilfe (in Word, nicht der VBA-IDE):
Erstellen bestimmter Dokumente
- Vorlagen
- Ändern der Dokumentvorlage "Normal" ("Normal.dotm")
Beachte: Diese Formatvorlage ist benutzerspezifisch, d.h. jeder Benutzer hat auf jedem Rechner seine eigene Standardvorlage. Deswegen nutzt es Dir überhaupt nichts, im Codemodul *Deiner* Standardvorlage Code zu schreiben, der mit dem Dokument mitwandern soll.
Damit sollten diese beiden Fragen geklärt sein:
- Das docm-Format dient angeblich dazu, dass Macros automatisch "enabled" sind. Warum verhält sich dann docx genauso wie docm?
Bei beiden Formaten wird mein Makro nämlich automatisch gestartet.
Es wird deswegen gestartet, weil es sich in Deiner Standardvorlage befindet - und diese beim Starten von Word automatisch geöffnet wird.
- Wenn ich diese Datei als doc abspeichere, wird das Makro ebenfalls automatisch ausgeführt, was ich auch so will.
Es sieht so aus, als ob nichts in dem internen VBA-Projekt stehen darf.
Selbstverständlich, das funktioniert ganz hervorragend. Nutze dazu das Code-Modul des Dokuments:
Project(Dateiname)
- Microsoft Word Objekte
- ThisDocument
bzw. in hinzugefügten Modulen
Mehr zu AutoMakros findest Du in der Word-VBA-Hilfe (F1 in der VBA-IDE),
Word 2007-Entwicklerreferenz
- Konzepte
- Auto-Makros
Beim Speichern als docx-Dokument wird das VBA-Modul *nicht* mit gespeichert, dazu ist das docm-Format da. Benennst Du Dokumente mit Code-Modul von .docm in .docx um, so bekommst Du beim Öffnen eine entsprechende Warnung.
Möchtest Du, dass in einer ganzen Serie von Dokumenten Dein Code enthalten sein sollte, so erstelle eine eigene Dokumentvorlage, die diesen Code enthält. Neue Dokumente, die auf dieser Dokumentvorlage basieren, starten mit einer Kopie des VBA-Codes (ThisDocument und weitere Module) der Vorlage.
Codemodule kannst Du signieren, Deine Signatur wird jedoch auf fremden Rechnern zunächst *nicht* in der Liste der vertrauenswürdigen Erstellern sein, so dass Du die Sicherheitseinstellungen in den betreffenden Word-Installationen entsprechend herunterdrehen musst.
Grundsätzlich empfehle ich Dir, Dich mit der Word-Hilfe und in der VBA-IDE mit dem Objektkatalog vertraut zu machen.
Freundliche Grüße
Vinzenz