*Markus: Word-2007-Makros "mitnehmen"

Hallo,

ich habe folgenden Sachverhalt:
In einem Word 2007 habe ich eine Datei geöffnet, in der ein Makro nach dem Öffnen dieser Datei automatisch gestartet wird.
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:

Sub MakroTest()
'
' MakroTest Makro
'

Selection.TypeText Text:="Das ist ein Makrotest"

End Sub

Im Projektordner links oben im Editor habe ich unter "Normal->Microsoft Word Objekte->ThisDocument" folgende Zeile eingetragen, damit das Makro bei jedem Öffnen der Datei automatisch ausgeführt wird:

Private Sub Document_Open()
   MakroTest
End Sub

Das funktioniert so weit ganz gut.
Dabei entstanden aber einige offene Fragen.

  1. 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.

  2. Wenn ich diese Datei als doc abspeichere, wird das Makro ebenfalls automatisch ausgeführt, was ich auch so will.
    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?
    Ich versuchte weiters unter dem Button "Organisieren" in den Makro-Einstellungen unter dem Reiter "Makroprojektelemente", die Klassen (oder wie auch immer das hier heißt), von "In Normal.dotm" nach links in das vermeintliche Doc-Datei-Projekt zu kopieren.
    Ich kenne mich damit zu wenig aus. Ich beobachtete aber, dass die Makros beim Ausprobieren überhaupt nicht mehr automatisch gestartet werden, also in dem Sinn nicht mehr funktionierten.
    Es sieht so aus, als ob nichts in dem internen VBA-Projekt stehen darf.
    Lösche ich die vorher kopierten Klassen wieder heraus, sodass wiederum alles nur mehr in "In Normal.dotm" steht, funktioniert das automatische Ausführen der Makros wieder.
    Hat jemand Kenntnisse darüber?

Markus

  1. 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:

    1. 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.

    1. 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

    1. Hallo Vinzent,

      danke für deine ausführliche Antwort. Jetzt ist mir schon einiges klarer.

      Markus