Erstellen von VBA-Add-Ins zum Erweitern und Automatisieren von Microsoft Office-Dokumenten

Zusammenfassung:  Informationen zum Erstellen von Add-Ins für Microsoft Word, Microsoft PowerPoint und Microsoft Excel mithilfe von Microsoft Visual Basic for Applications (VBA). Sie prüfen, in welchen Fällen VBA die beste Wahl für Ihre Add-Ins ist, und bearbeiten mehrere Beispielaufgaben, die im Zusammenhang mit VBA-Add-Ins für Microsoft Office 2010 anfallen können.

Letzte Änderung: Freitag, 24. April 2015

Gilt für: Excel 2010 | Office 2007 | Office 2010 | Open XML | PowerPoint 2010 | SharePoint Server 2010 | VBA | Word 2010

Inhalt dieses Artikels
Gründe für VBA
Einsatzmöglichkeiten von VBA
Erstellen von VBA-Add-In-Dateien
Beheben von Problemen mit Add-Ins
Einsatzmöglichkeiten von VBA-Add-Ins
Verwalten des VBA-Codes
Nächste Schritte
Weitere Ressourcen
Informationen zur Autorin

Veröffentlicht:  Februar 2011

Bereitgestellt von: Stephanie Krieger

Inhalt

  • Gründe für VBA

  • Einsatzmöglichkeiten von VBA

  • Erstellen von VBA-Add-In-Dateien

  • Beheben von Problemen mit Add-Ins

  • Einsatzmöglichkeiten von VBA-Add-Ins

  • Verwalten des VBA-Codes

  • Nächste Schritte

  • Weitere Ressourcen

  • Informationen zur Autorin

Klicken Sie, um Code abzurufen. Beispielcode herunterladen

Gründe für VBA

Als Entwickler verwenden Sie VBA ggf. mitunter für die Interaktion mit Ihrem verwalteten Code, wenn Sie Dokumente und Vorlagen automatisieren. Doch machen Sie sich überhaupt alle Vorteile von VBA zu Nutze? Wenn Ihr erster Schritt am Anfang eines neuen Microsoft Office-Projekts das Öffnen von Microsoft Visual Studio ist, machen Sie sich u. U. mehr Arbeit als nötig.

Wenn zum Erfüllen der Projektanforderungen die Leistungsfähigkeit von verwaltetem Code, z. B. für die Serverintegration, ein flexiblerer Benutzeroberflächenentwurf oder das Nutzen von Microsoft Silverlight-Technologie erforderlich ist, stellen Sie das Lesen ein, und öffnen Sie Visual Studio. Doch wenn Sie die Anforderungen eines bestimmten Projekts mit einer Lösung erfüllen können, die einfacher, schneller (und möglicherweise wirtschaftlicher) zu entwickeln ist, ist es an der Zeit, VBA eine Chance zu geben.

Einsatzmöglichkeiten von VBA

Kürzlich traten in einem Großunternehmen Komplikationen bei einem einfachen Add-In auf, das in Visual Studio entwickelt wurde. Zweck des Add-Ins war das Bereitstellen eines Menübands mit Registerkarten in Word, PowerPoint und Excel mit einer Verknüpfung zu diversen angepassten Hilfeinhalten.

Als mich die Unternehmensvertreter um Hilfe baten, fragte ich sie, warum sie für eine solch einfache Aufgabe nicht VBA nutzten. Es gäbe keinen besonderen Grund, war die Antwort. Es kam ihnen nichts anderes in den Sinn als Visual Studio. Ich öffnete deshalb die Visual Basic-Editoren in den Office 2010-Anwendungen. Ca. eine Stunde später verfügten sie über einfache, vollständige Add-Ins für Word, Excel und PowerPoint mit einer Benutzeroberfläche, die exakt der ursprünglich gewünschten entsprach.

Wie das Sprichwort so schön sagt, nicht mit Kanonen auf Spaten schießen. Wenn die gewünschte Aufgabe mit VBA erledigt werden kann, benötigen Sie meist weniger Zeit und weniger Code zum Erstellen eines Pakets mit weniger Abhängigkeiten, das einfacher bereitzustellen ist.

Das genannte Beispiel ist zugegebenermaßen sehr einfach. Doch Sie werden überrascht sein, wie viel Sie mit einem VBA-Add-In unabhängig davon erreichen können, ob Sie Lösungen für einen oder Tausende Benutzer entwickeln. Als professionelle Beraterin für die Dokumenterstellung und -verwaltung entwickle ich auf VBA basierende Lösungen in Word, PowerPoint und Excel für Unternehmen mit einer halben Million Benutzer in ca. 100 Ländern.

In den folgenden Abschnitten erfahren Sie, wie Add-In-Dateien in Word, PowerPoint und Excel erstellt werden. Anschließend bearbeiten Sie mehrere Beispielaufgaben, die Sie in Ihre Add-Ins einbeziehen können – von der Vereinfachung der Dokumenterstellung im Unternehmen bis zur Interaktion mit vordefinierter Office 2010-Funktionalität.

Erstellen von VBA-Add-In-Dateien

In diesem Abschnitt wird erläutert, wie einfache Add-In-Dateien in Word, PowerPoint und Excel mithilfe des zuvor genannten Beispiels erstellt werden. Jedes Add-In stellt eine benutzerdefinierte Registerkarte im Menüband bereit, über die der Benutzer einen Schnellzugriff auf eine benutzerdefinierte Auswahl von Hilfethemen erhält.

Erstellen eines Word-Add-Ins

VBA-Add-Ins für Word sind globale Vorlagen, d. h. Vorlagen, die so installiert werden, dass sie ungeachtet des aktiven Dokuments zur Verfügung stehen. Zum Erstellen eines Word-Add-Ins beginnen Sie mit dem Anlegen einer neuen DOTM-Datei (makrofähige Word-Vorlage).

So erstellen Sie das VBA-Projekt

  1. Klicken Sie bei geöffneter neuer DOTM-Vorlage in Word auf der Registerkarte Entwicklertools in der Gruppe Code auf Visual Basic, oder drücken Sie ALT+F11.

  2. Klicken Sie im Menü Einfügen auf Modul, und benennen Sie anschließend das Modul im Fenster Eigenschaften.

  3. Klicken Sie im Menü Extras auf Eigenschaften von Projekt, um das Projekt zu benennen. Fügen Sie eine Projektbeschreibung oder einen Kennwortschutz hinzu.

Es folgt der Code für das Add-In für benutzerdefinierte Hilfe. Kopieren Sie ihn in das zuvor erstellte Modul.

Wichtig

Für in diesen Makros referenzierte Dateien können Sie die Office 2010-Produktanleitungen und das Handbuch für das interaktive Menü des Menübands aus dem Microsoft Download Center herunterladen. Suchen Sie im Inhalt des Downloads zu diesem Artikel eine Platzhalterdatei, die Sie als Dokument mit Anleitung zum Branding Ihres Unternehmens nutzen können. Sie müssen zudem zum Testen Ihres Add-Ins die referenzierten Dateien unter Verwendung der Pfad- und Dateinamen speichern, die in den Makros angegeben sind. Wenn Sie andere Pfad- und Dateinamen verwenden, ändern Sie die Makros entsprechend.

Beachten Sie ferner, dass vervollständigte Versionen aller Add-In-Beispiele in diesem Artikel im Download enthalten sind. Zum Testen der Add-Ins für benutzerdefinierte Hilfe in Word, PowerPoint und Excel müssen Sie allerdings die entsprechenden Produktanleitungen und Handbücher für das interaktive Menü des Menübands herunterladen und speichern bzw. installieren.

Option Explicit
Public oPath As String

Sub CommandRef(ByVal Control As IRibbonControl)
On Error GoTo Errorhandler
'The FollowHyperlink method used in this procedure requires an open document.
With Documents
    If .Count = 0 Then
    .Add
    End If
End With
'If you use the environmental variable for program files as shown here,
'(which is usually advisable) rather than hard-coding the drive letter,
'note that 64-bit machines that include both a Program Files x86 folder
'and a Program Files folder may not point to the desired location.
oPath = Environ("ProgramFiles")
ActiveDocument.FollowHyperlink Address:=oPath & _
    "\CompanyTools\CustomHelp\Word 2010\Word 2010 Guide.html", NewWindow:=True
Exit Sub
Errorhandler:
'Error 4198 occurs if the file name or path is not found.
If Err.Number = 4198 Then
    MsgBox "The Word 2010 Interactive Guide is unavailable. " & _
        "Consult your local IT department for assistance.", vbInformation
End If
End Sub

Sub ProductGuide(ByVal Control As IRibbonControl)
On Error GoTo Errorhandler
With Documents
    If .Count = 0 Then
        .Add
    End If
End With
oPath = Environ("ProgramFiles")
ActiveDocument.FollowHyperlink Address:=oPath & _
    "\CompanyTools\CustomHelp\WordProductGuide.pdf", NewWindow:=True
Exit Sub
Errorhandler:
If Err.Number = 4198 Then
    MsgBox "The file 'WordProductGuide.pdf' is unavailable. " & _
        "Consult your local IT department for assistance.", vbInformation
End If
End Sub

Sub BrandOverview(ByVal Control As IRibbonControl)
On Error GoTo Errorhandler
With Documents
    If .Count = 0 Then
    .Add
    End If
End With
oPath = Environ("ProgramFiles")
ActiveDocument.FollowHyperlink Address:=oPath & _
    "\CompanyTools\CustomHelp\Brand Guidelines.pdf", NewWindow:=True
Exit Sub
Errorhandler:
If Err.Number = 4198 Then
    MsgBox "The file 'Brand Guidelines.pdf' is unavailable. " & _
        "Consult your local IT department for assistance.", vbInformation
End If
End Sub

Hinweis

Die Prozeduren in diesem Codebeispiel sind als Menüband-Steuerelemente deklariert. Sobald die Deklaration erfolgt ist, können Sie die Prozedur nur über das dazugehörige Menüband-Steuerelement ausführen. Bei einem typischen Add-In, bei dem Makros wesentlich mehr Code aufweisen, ist es häufig komfortabler, über ein gesondertes Modul mit einem eigenen Satz von Prozeduren für die Menüband-Steuerelemente zu verfügen und die Makros über die Steuerelemente aufzurufen.

Sobald Ihr Modul vollständig ist, können Sie die Vorlage speichern und schließen.

Zum Installieren der globalen Vorlage müssen Sie Word beenden und die Datei im Word-Ordner Startup speichern. Beim Start von Word werden die globalen Vorlagen in diesem Ordner automatisch geladen. Bevor Sie dieses Add-In laden können, müssen Sie allerdings zunächst das Office Open XML-Markup für die benutzerdefinierte Menüband-Registerkarte hinzufügen (siehe den nächsten Abschnitt).

In Microsoft Windows 7 und Windows Vista ist der Word-Standardspeicherort des Ordners Startup das Verzeichnis C:\Users\[Benutzername]\AppData\Roaming\Microsoft\Word\Startup. Zum Verwalten von Add-Ins für globale Vorlagen oder zum Prüfen, ob Ihr Add-In geladen ist, klicken Sie in Word auf der Registerkarte Entwicklertools auf Add-Ins.

Wenn Sie den Code nach dem Laden des Add-Ins bearbeiten müssen, öffnen Sie die DOTM-Datei in Word. In Word wird die zuvor geladene Instanz automatisch durch die geöffnete Vorlage ersetzt. Bearbeiten Sie den Code im Visual Basic-Editor, speichern Sie Ihre Änderungen, und schließen Sie anschließend die DOTM-Datei. Die geladene Instanz des Add-Ins wird automatisch mit Ihren letzten Änderungen aktualisiert und bleibt geladen, sodass Word nicht neu gestartet werden muss.

Hinweis

Der benutzerdefinierte Inhalt der Benutzeroberflächen in diesem Artikel gilt für Office 2010, aber nicht für Office für Mac 2011. In Word 2011 können Sie Ihrer spezifischen Vorlage benutzerdefinierte Symbolleisten und Menüs programmgesteuert hinzufügen. Dies ist auch in Word möglich, ohne Code zu verwenden. Zeigen Sie hierzu im Menü Ansicht auf Symbolleisten, und klicken Sie dann auf Symbolleisten und Menüs anpassen.

Zum Zeitpunkt der Veröffentlichung dieses Artikels war ggf. ein zusätzlicher Schritt nötig, um eine globale Vorlage in Word 2011 beim Start der Anwendung automatisch zu laden. Wenn Ihre Vorlage bei Befolgen der vorherigen Anweisungen nicht erneut geladen wird, fügen Sie in einem Modul in der globalen Vorlage Normal.dotm ein einzeiliges Makro hinzu, das Anweisungen an das hinzuzufügende Makro übergibt. Der Code hierfür sieht wie folgt aus (beachten Sie, dass Sie den Speicherort und Dateinamen im Code entsprechend Ihrer globalen Vorlage ändern müssen):

Sub AutoExec()AddIns.Add fileName:="[Complete Path and File Name]", Install:=TrueEnd Sub

Erstellen der benutzerdefinierten Benutzeroberfläche für Ihr Add-In

Sie nutzen ggf. bereits ein Hilfsprogramm zum Anpassen des Menübands in einem Dokument oder einer Vorlage, doch das manuelle Hinzufügen des Markups erfolgt ebenso schnell und einfach. Das Office Open XML-Markup können Sie wie gewohnt in Windows Editor oder einem anderen Texteditor schreiben. Hierfür ist auch Visual Studio hilfreich, da ein Verweis auf das Anpassungsschema für das Menüband erfolgen kann, was heißt, dass Sie IntelliSense nutzen können.

Hinweis

Bei den folgenden Schritten wird davon ausgegangen, dass Sie das Dokumentpaket öffnen und die customUI-Struktur der Datei manuell hinzufügen. Wenn Sie das noch nie gemacht haben, ist dies eine gute Möglichkeit, die Office Open XML-Struktur hinter dem Dokument kennenzulernen. Wenn Sie bereits Erfahrung mit der Bearbeitung eines Office Open XML-Dokumentpakets haben und mit Visual Studio 2010 arbeiten, können Sie versuchen, mit dem Open XML Package Editor Power Tool das Dokument oder die Vorlage direkt in Visual Studio zu öffnen. Dies verringert die Anzahl der Schritte, da das Tool das direkte Hinzufügen von Ordnern zum Paket ermöglicht, das Hinzufügen von Beziehungen erleichtert und Inhaltstypen automatisch verwaltet, wenn Sie einen Teil oder eine Datei hinzufügen. Weitere Informationen und Download des Open XML Package Editor Power Tool für Visual Studio 2010

Sie können zum Erstellen der customUI-Struktur auch ein Tool nutzen, z. B. den Custom UI Editor, der kostenlos ist, die benötigen Teile für Sie hinzufügt und Beispiele für das Markup von customUI.xml bereitstellt.

Das Markup für dieses Beispiel umfasst nur einige Schaltflächen, dient aber zur Veranschaulichung verschiedener Anpassungen, die Sie mühelos einbeziehen können. Beachten Sie beispielsweise in Abbildung 1, dass die dritte Schaltfläche ein benutzerdefiniertes Bild ist. Das Markup enthält auch benutzerdefinierten ScreenTip-Text und benutzerdefinierte KeyTip-Zugriffstasten.

So fügen Sie Office 2010-Dokumenten oder -Vorlagen "customUI"-Markup hinzu

  1. Erstellen Sie den Ordner customUI. Sie können diesen Ordner an einem beliebigen leicht zugänglichen Speicherort erstellen, z. B. auf Ihrem Windows-Desktop.

  2. Fügen Sie dem neuen Ordner die Datei customUI.xml und anschließend das Markup für Ihre Menübandanpassung dieser Datei hinzu. Der folgende Code ist das Markup, das in das zuvor genannte Word-Add-In-Beispiel eingefügt werden soll.

    <?xml version="1.0" encoding="utf-8"?>
    <customUI xmlns="https://schemas.microsoft.com/office/2006/01/customui">
      <ribbon>
        <tabs>
          <tab id="customTab" label="Company Help" >
            <group id="CustomHelp" label="Get Help" >
              <button id="WebGuide" visible="true" size="large" 
                      label="Interactive Word 2010 Guide" keytip="W" 
                      screentip="Get help for finding commands on the ribbon." 
                      onAction="CommandRef" imageMso="FindDialog"/>
              <button id="ProdGuide" visible="true" size="large" 
                      label="Word 2010 Product Guide" keytip="P" 
                      screentip="Learn what's new in Word 2010 and how to find it." 
                      onAction="ProductGuide" imageMso="AdpPrimaryKey"/>
              <button id="BrandGuide" visible="true" size="large" 
                      label="Company Brand Guidelines" keytip="B" 
                      screentip="Get help for using company branding." 
                      onAction="BrandOverview" image="brand"/>
            </group>
          </tab>
        </tabs>
      </ribbon>
    </customUI>
    
  3. Fügen Sie den Ordner customUI dem Dokument- oder Vorlagenpaket hinzu.

    Hierzu können Sie die Dateinamenerweiterung in ZIP ändern und anschließend das ZIP-Paket öffnen, um den neuen Ordner hineinzuziehen. Sie können auch ein Hilfsprogramm verwenden, welches das Öffnen des Pakets ohne Änderung der Dateinamenerweiterung ermöglicht, z. B. 7-Zip.

    Warnung

    Wenn Sie zum Öffnen des Pakets die Dateinamenerweiterung ändern, vergessen Sie nicht, sie wieder zurückzusetzen, sobald Sie fertig sind.

  4. Fügen Sie eine Beziehungsdefinition für die Datei customUI.xml der Datei mit den Beziehungen auf oberster Ebene (.rels) im ZIP-Paket hinzu.

    1. Öffnen Sie im Ordner _rels die Datei .rels.

    2. Fügen Sie die folgende Beziehungsdefinition hinzu. Wenn eine andere Beziehung in der Datei bereits die ID rID4 verwendet, wählen Sie für diese Beziehung eine andere ID aus.

      <Relationship Id="rID4" Type="https://schemas.microsoft.com/office/2006/relationships/ui/extensibility" Target="customUI/customUI.xml"/>
      

      Hinweis

      In diesem besonderen Fall sind die Schritte 5 bis 7 erforderlich, da für die Schaltfläche Company Brand Guidelines ein benutzerdefiniertes Bild verwendet wird (siehe Abbildung 1). Wenn in Ihrem Markup nur vordefinierte Bilder verwendet werden, sind keine weiteren Schritte erforderlich. Eine Liste verfügbarer vordefinierter Office 2010-Bilder, die Sie in Ihrem Markup für customUI verwenden können, finden Sie im Abschnitt "Weitere Ressourcen" am Ende dieses Artikels.

  5. Erstellen Sie im Ordner customUI die beiden Unterordner _rels und images, wenn Sie das Markup dieses Beispiels verwenden.

  6. Legen Sie die Bilddatei für Ihr benutzerdefiniertes Steuerelementbild (das für die dritte Schaltfläche in diesem Beispiel verwendet wird) im Ordner images ab, und erstellen Sie die Datei customUI.xml.rels, die Sie im Ordner _rels ablegen. Verwenden Sie für die RELS-Datei das folgende Markup.

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <Relationships xmlns="https://schemas.openxmlformats.org/package/2006/relationships"><Relationship Id="brand" Type="https://schemas.openxmlformats.org/officeDocument/2006/relationships/image" Target="images/brandicon.png"/></Relationships>
    
  7. Öffnen Sie die Datei [Content_Types].xml auf der obersten Ebene des ZIP-Pakets. Fügen Sie für die Dateinamenerweiterung PNG (das Dateiformat des benutzerdefinierten Bilds) eine Definition hinzu, falls noch nicht vorhanden. Verwenden Sie das folgende Markup.

    <Default Extension="png" ContentType="image/png"/>
    

Abbildung 1. Ergebnisse des Markups von "customUI"

Ergebnisse des customUI-Markups

Weiter unten in diesem Artikel finden Sie Beispiele weiterer Aufgaben für customUI, z. B.:

  • Verwenden eines Steuerelements vom Typ "unterteilte Schaltfläche"

  • Hinzufügen einer Menübandanpassung zu einer vordefinierten Registerkarte

  • Angeben der Position von Steuerelementen auf einer Registerkarte oder einer Registerkarte auf dem Menüband

  • Verwenden von VBA mit dem Markup von "customUI" zum Verwalten der Sichtbarkeit von Steuerelementen

Erstellen eines PowerPoint-Add-Ins

Beginnen Sie zum Erstellen eines PowerPoint-Add-Ins mit dem Anlegen einer neuen PowerPoint-Präsentationsdatei (.pptm). In PowerPoint wird ein eindeutiges Dateiformat für Add-Ins (.ppam) verwendet, das jedoch schreibgeschützt ist. Sie schreiben und bearbeiten Ihren Code demnach in der PPTM-Datei und speichern anschließend eine Kopie als PPAM-Add-In.

So erstellen Sie ein PowerPoint-Add-In

  1. Öffnen Sie bei geöffneter neuer PPTM-Datei den Visual Basic-Editor.

    Hinweis

    Wenn Sie in mehreren Anwendungen gleichzeitig im Visual Basic-Editor arbeiten, drücken Sie ALT+F11, um zwischen dem Visual Basic Editor und der gewünschten Anwendung umzuschalten.

  2. Führen Sie dieselben Schritte wie im Abschnitt zum Word-Add-In in diesem Artikel zum Erstellen eines neuen VBA-Projekts aus. Anschließend können Sie den Code in diesem Abschnitt für das benutzerdefinierte Hilfemodul kopieren und für PowerPoint wie folgt bearbeiten:

    1. Ersetzen Sie das Documents-Auflistungsobjekt und das ActiveDocument-Objekt durch Presentations bzw. ActivePresentation.

    2. Ersetzen Sie Verweise auf Word 2010-Inhalts- und Dateispeicherorte durch Verweise auf vergleichbare PowerPoint 2010-Inhalte.

      Die PowerPoint-Produktanleitung und das Handbuch für das interaktive Menü des Menübands stehen ebenfalls über die zuvor genannten Links zum Download bereit. Beachten Sie, dass Sie wie beim Word-Add-In die PowerPoint-Dateien entsprechend den im Makro angegebenen Pfad- und Dateinamen speichern und benennen müssen. Da sich einige dieser Dateien von denen für das Word-Add-In unterscheiden, müssen die Dateinamen in den Makros ebenfalls entsprechend den Beispieldateinamen bearbeitet werden.

  3. Speichern und schließen Sie die PPTM-Datei.

  4. Fügen Sie der PPTM-Datei den erforderlichen Ordner customUI und Inhalt hinzu.

    Sie können die Schritte im vorherigen Abschnitt befolgen und das dort bereitgestellte Markup (z. B. Beschriftungen und ScreenTip-Text) entsprechend den Anforderungen des ausgewählten PowerPoint-Inhalts bearbeiten. Befolgen Sie jedoch die Anweisungen zum Bearbeiten der Dateien .rels und [Content_Types].xml in der PowerPoint-Datei, anstatt diese zu ersetzen.

  5. Öffnen Sie die PPTM-Datei in PowerPoint. Nachdem Sie sich vergewissert haben, dass die benutzerdefinierte Menüband-Registerkarte ordnungsgemäß aussieht und funktioniert, speichern Sie eine Kopie der Datei als PowerPoint-Add-In (*.ppam). PowerPoint speichert die Datei automatisch im Ordner Microsoft\AddIns.

    In Windows 7 lautet der Standardpfad für Add-Ins C:\Users\Benutzername\AppData\Roaming\Microsoft\AddIns.

Hinweis

In PowerPoint für Mac 2011 können Sie Ihrem Add-In programmgesteuert eine Symbolleiste oder ein Menü hinzufügen. Ein Beispiel finden Sie in den begleitenden Downloads zu diesem Artikel.

So laden Sie das PowerPoint-Add-In

  1. Klicken Sie in PowerPoint auf der Registerkarte Entwicklertools auf die Schaltfläche Add-Ins.

  2. Klicken Sie auf Neu hinzufügen.

  3. Wählen Sie die zuvor gespeicherte Datei aus, und klicken Sie dann auf Öffnen.

  4. Klicken Sie bei Anzeige einer Warnung zur Makrosicherheit auf Makros aktivieren.

Geladene PowerPoint-Add-In-Dateien werden standardmäßig nicht im Projektexplorer des Visual Basic-Editors angezeigt. Sie müssen der Windows-Registrierung einen neuen Wert hinzufügen, damit PPAM-Projektdateien angezeigt und geöffnet werden können. Fügen Sie dem Schlüssel HKEY_CURRENT_USER\Software\Microsoft\Office\14.0\PowerPoint\Options den DWORD-Wert DebugAddins mit dem Wert 1 hinzu. Starten Sie anschließend PowerPoint neu. Sie können dann Inhalte aus dem geladenen PPAM-Projekt anzeigen, exportieren und kopieren. Sie können auch Bearbeitungen vornehmen, um diese im geladenen Add-In zu testen, wodurch die Add-In-Funktion mit einem praktischen Notizblock vergleichbar ist, wenn Sie eine Problembehandlung durchführen oder etwas Neues ausprobieren. Änderungen können jedoch nicht direkt in der geladenen Add-In-Datei gespeichert werden.

Erstellen eines Excel-Add-Ins

Excel-Add-Ins sind möglicherweise von den drei in diesem Artikel behandelten Programmen am effizientesten zu erstellen, da Sie eine Datei als Excel-Add-In (.xlam) speichern, die Add-In-Datei laden und anschließend den Code direkt in der Add-In-Datei schreiben und bearbeiten können, solange diese geladen ist.

So erstellen und laden Sie ein Excel-Add-In

  1. Erstellen Sie eine neue Excel-Datei, und speichern Sie sie als Excel-Add-In (.xlam). Excel speichert die Datei automatisch im Ordner Microsoft\AddIns.

  2. Klicken Sie auf der Registerkarte Entwicklertools auf Add-Ins. Ihr neu gespeichertes Add-In sollte in der Liste angezeigt werden. Falls dem so ist, wählen Sie es aus (wodurch es geladen wird) und schließen anschließend das Dialogfeld. Klicken Sie andernfalls auf die Schaltfläche Durchsuchen, um die Add-In-Datei zu suchen und zu laden.

  3. Öffnen Sie den Visual Basic-Editor. Anschließend können Sie das Projekt analog zu den Abschnitten zu Word und PowerPoint erstellen und auffüllen.

    Wenn Sie den VBA-Code im Abschnitt zum Word-Add-In kopieren, ändern Sie die Verweise auf das Documents-Auflistungsobjekt und ActiveDocument-Objekt in Workbooks bzw. ActiveWorkbook. Ändern Sie außerdem Verweise auf Windows-Dateien und -Software entsprechend dem Excel-Inhalt. Die Excel-Produktanleitung und das Handbuch für das interaktive Menü des Menübands für dieses Add-In können ebenfalls über die zuvor genannten Links heruntergeladen werden.

  4. Beenden Sie Excel, und wechseln Sie zum Ordner Microsoft\AddIns, in dem Ihre neue Add-In-Datei gespeichert ist.

  5. Fügen Sie customUI der neuen Add-In-Datei hinzu.

    Wenn Sie das zuvor angegebene Markup und den Code für das Word-Add-In verwenden, bearbeiten Sie die Attribute (z. B. Beschriftungen und ScreenTip-Text) entsprechend den Anforderungen des Excel-Inhalts. Befolgen Sie unbedingt die vorherigen Anweisungen für die Anpassung der Benutzeroberfläche und Bearbeitung der Dateien .rels und [Content_Types].xml in der Excel-Datei.

Beim nächsten Öffnen von Excel sollte Ihr Add-In noch geladen und Ihre Benutzeroberflächenanpassung sichtbar sein.

Beheben von Problemen mit Add-Ins

Falls Ihr Add-In nicht ordnungsgemäß geladen oder ausgeführt wird, führen Sie eine Überprüfung auf die folgenden gängigen Fehler durch:

  • Menübandanpassung wird nicht angezeigt. Wenn Ihre Menübandanpassung beim Öffnen der Datei mit customUI.xml (oder beim Laden des Add-Ins) nicht angezeigt wird, ist zumeist ein Syntaxfehler die Ursache. Überprüfen Sie die erstellte Datei customUI.xml und die Datei .rels, der Sie die Beziehung hinzugefügt haben.

    • Beachten Sie, dass auch ein sehr geringfügiger Fehler wie ein fehlendes Anführungszeichen, eine fehlende Klammer oder eine falsche Groß-/Kleinschreibung einen fehlerhaften XML-Dokumentteil verursachen kann.

    • Überprüfen Sie auch die Beziehungsdefinition, die Sie der Datei .rels hinzugefügt haben, darauf, ob der Pfad dem Namen des Ordners und der Datei entspricht, in der Sie das customUI-Markup gespeichert haben.

  • Eine Prozedur wird nicht ausgeführt.  Wenn beim Klicken auf ein Add-In-Steuerelement im Menüband eine Prozedur nicht ausgeführt wird, überprüfen Sie Folgendes:

    • Entspricht im customUI-Markup der Prozedurname, den Sie im OnAction-Attribut für das Steuerelement angegeben haben, dem Namen der Prozedur in Ihrem VBA-Code?

    • Ist in der Prozedur, die Sie als Wert für das OnAction-Attribut verwendet haben, das customUI-Markup ebenfalls als Menüband-Steuerelement in VBA deklariert?

  • Kein Add-In-Code kann ausgeführt werden.  Wenn das Add-In im Menüband angezeigt wird, aber keine Ihrer Prozeduren ausgeführt wird, liegt möglicherweise ein Sicherheitsproblem vor.

    Klicken Sie auf der Registerkarte Entwicklertools auf Makrosicherheit. Wählen Sie die Option Alle Makros mit Benachrichtigung deaktivieren aus. Das Zulassen der Ausführung von Makros ist freilich nicht ratsam. Wenn Sie jedoch Makros ohne Benachrichtigung deaktivieren, werden Add-Ins ggf. nicht geladen.

Einsatzmöglichkeiten von VBA-Add-Ins

Wie bereits erwähnt, ist die hier vorgestellte benutzerdefinierte Hilfe das einfachste Beispiel für die Verwendung eines Add-Ins. Sie können mit VBA Add-Ins erstellen, die vollständige Dokumentlösungen für zahlreiche Arten von Anforderungen bieten.

Die Aufgaben in den folgenden Abschnitten sind nur ein Anfang. Ziel ist es, Sie auf den ersten Schritten zu Konzepten zu begleiten, die Sie für viele verschiedene Anforderungen umsetzen können, z. B. das Erfassen und Speichern von Benutzerinformationen, das Auffüllen von Dokumenten, das Bewerten von Dokumentinhalten und das Interagieren mit vordefinierten Aufgaben, z. B. Schließen einer Datei oder Starten der Anwendung.

Bedenken Sie beim Untersuchen dieser Konzepte, dass ein Großteil des gezeigten VBA-Codes für Word, PowerPoint und Excel ungeachtet davon verwendet werden kann, welche Anwendung im jeweiligen Beispiel genutzt wird.

Automatisieren von Dokumenterstellungsaufgaben

Beim Automatisieren von Inhalten für Benutzer müssen Sie ggf. Benutzerinformationen und -einstellungen erfassen und speichern und anhand dieser Informationen anschließend Inhalte programmgesteuert generieren oder anpassen.

Bei diesem Beispiel erfasst ein Word-Add-In Kontaktinformationen und Papierformateinstellungen. Das Add-In bietet ferner dem Benutzer die Möglichkeit, ein Briefdokument mit dem Branding des Unternehmens zu erstellen. Beim Verfassen eines Briefs nutzt das Add-In automatisch die gespeicherten Informationen.

Das Beispiel-Add-In enthält ein UserForm-Formular und drei Module:

  • Das UserForm-Formular dient zum Erfassen und Speichern der Benutzerinformationen und -einstellungen.

  • Ein Modul ist für die Variablen vorgesehen, die von mehreren Prozeduren benötigt werden, z. B. zum Abrufen der gespeicherten Benutzerinformationen.

  • Das zweite Modul ist für die Menüband-Steuerelemente zuständig.

  • Das letzte Modul ist für den Code zum Generieren benutzerdefinierter Dokumente vorgesehen.

Erstellen Sie für diese Aufgabe ein Dialogfeld (UserForm), in das der Benutzer die Informationen eingeben kann. Speichern Sie diese Informationen anschließend in der Windows-Registrierung.

Hinweis

Bevor Sie mit der folgenden Prozedur beginnen können, müssen Sie das VBA-Projekt erstellen. Beachten Sie auch, dass Sie für Office für Mac 2011 denselben angegebenen Code zum Speichern und Abrufen von Informationen in/aus der Windows-Registrierung verwenden können. Unter Mac OS funktionieren diese Methoden identisch und speichern Informationen in einer PLIST-Datei im Benutzereinstellungsordner der Bibliothek.

So erfassen und speichern Sie Benutzerinformationen

  1. Erstellen Sie im Visual Basic-Editor das UserForm-Formular, und füllen Sie es mit den gewünschten Steuerelementen auf. Klicken Sie dazu im Menü Einfügen auf UserForm. Wenn die Toolbox (die die verfügbaren UserForm-Steuerelemente enthält) nicht automatisch angezeigt wird, klicken Sie im Menü Ansicht auf Toolbox.

    1. Klicken Sie auf das gewünschte Steuerelement (z. B. eine Beschriftung oder ein Textfeld), und ziehen Sie es auf das UserForm -Formular, um das Steuerelement mit der benötigten Größe zu erstellen.

      (Optionen für Ausrichtung und Abstand finden Sie im Menü Format.)

    2. Im Fenster Eigenschaften können Sie das Steuerelement benennen und verschiedene Eigenschaften festlegen, z. B. eine Beschriftung oder eine Zugriffstaste hinzufügen, die Höhe und Breite einstellen und die Position von links oben ausgehend festlegen. Sie können in diesem Fenster viele Darstellungs- und Verhaltensaspekte von Steuerelementen festlegen.

    In Abbildung 2 ist das ausgefüllte UserForm-Objekt für dieses Beispiel dargestellt. Beachten Sie die benutzerfreundlichen Details, die die Benutzerinteraktion mit diesem Formular vereinfachen. Für Tastaturbenutzer sind beispielsweise Zugriffstasten angegeben, und die Steuerelemente haben eine einheitliche Größe und Ausrichtung und sind mithilfe von Rahmen übersichtlich organisiert.

    Zusätzlich zu den Features, die Sie sehen können, wurde die Aktivierreihenfolge zur Steigerung der Benutzerfreundlichkeit für Tastaturbenutzer festgelegt. Klicken Sie zum Festlegen der Aktivierreihenfolge für Steuerelemente in einem UserForm-Formular mit der rechten Maustaste auf das Formular, und klicken Sie dann auf Aktivierreihenfolge. Klicken Sie anschließend mit der rechten Maustaste auf jeden Rahmen, und klicken Sie dann auf Aktivierreihenfolge, um die Steuerelemente im ausgewählten Rahmen neu anzuordnen.

    Abbildung 2. UserForm-Formular nach Abschluss der Codierung

    UserForm-Formular nach der Codierung

  2. Erstellen Sie ein Modul für die Variablen, die Sie für das UserForm-Formular benötigen, einschließlich Variablen zum Abrufen der Einstellungen, die der UserForm-Code speichert, und zum Auffüllen der Steuerelemente im UserForm-Formular.

    Option Explicit
    Public oName As String, oTitle As String, oAdd1 As String, oAdd2 As String, _
    oPh1 As String, oPh2 As String, oPDat1 As String, oPDat2 As String, i As Integer, _
    oPaper As String, oPhone(2) As String, oDoc As Word.Document
    
    Sub DocVarbs()
    'GetSetting and SaveSetting use VB and VBA Program Settings in the Registry: _
    HKEY_CURRENT_USER\Software\VB and VBA Program Settings
    oName = GetSetting("CustomDocs", "Info", "Name")
    oTitle = GetSetting("CustomDocs", "Info", "Title")
    oAdd1 = GetSetting("CustomDocs", "Info", "Add1")
    oAdd2 = GetSetting("CustomDocs", "Info", "Add2")
    oPh1 = GetSetting("CustomDocs", "Info", "PLabel1")
    oPh2 = GetSetting("CustomDocs", "Info", "PLabel2")
    oPDat1 = GetSetting("CustomDocs", "Info", "PData1")
    oPDat2 = GetSetting("CustomDocs", "Info", "PData2")
    oPaper = GetSetting("CustomDocs", "Info", "Paper")
    
    'populates the combo boxes in the dialog box
    oPhone(0) = "Phone"
    oPhone(1) = "Fax"
    oPhone(2) = "Email"
    
    'sets default values for the first use of the info dialog box
    'or in the case that a user generates a document with the tools
    'before saving information.
    If oName = "" Then
        oName = Application.UserName
        oChk = True
    End If
    If oPh1 = "" Then oPh1 = "Phone"
    If oPh2 = "" Then oPh2 = "Email"
    If oPaper = "" Then oPaper = "L"
    End Sub
    
  3. Fügen Sie den Code für das UserForm-Formular hinzu.

    Die Initialize-Prozedur dient zum Auffüllen des Formulars mit Informationen, die bereits gespeichert wurden, oder mit den Standardwerten, auf die in den Variablenprozeduren im vorherigen Schritt hingewiesen wurde. Mit der cmdSave-Prozedur werden die vom Benutzer angegebenen Informationen in der Registrierung gespeichert.

    Option Explicit
    
    Private Sub cmdCancel_Click()
    Unload Me
    End Sub
    
    Private Sub cmdSave_Click()
    Dim myP As String
    With Me
        SaveSetting "CustomDocs", "Info", "Name", .txtName.Value
        SaveSetting "CustomDocs", "Info", "Title", .txtTitle.Value
        SaveSetting "CustomDocs", "Info", "Add1", .txtAdd1.Value
        SaveSetting "CustomDocs", "Info", "Add2", .txtAdd2.Value
        SaveSetting "CustomDocs", "Info", "PLabel1", .cmbPh1.Value
        SaveSetting "CustomDocs", "Info", "PLabel2", .cmbPh2.Value
        SaveSetting "CustomDocs", "Info", "PData1", .txtPDat1.Value
        SaveSetting "CustomDocs", "Info", "PData2", .txtPDat2.Value
        If .optA.Value = True Then
            myP = "A"
        Else
            myP = "L"
        End If
        SaveSetting "CustomDocs", "Info", "Paper", myP
    End With
    Unload Me
    End Sub
    
    Private Sub UserForm_Initialize()
    Call modVarbs.DocVarbs
    With Me
        .txtName.Value = oName
        .txtTitle.Value = oTitle
        .txtAdd1.Value = oAdd1
        .txtAdd2.Value = oAdd2
        .txtPDat1.Value = oPDat1
        .txtPDat2.Value = oPDat2
        .cmbPh1.List() = oPhone
        .cmbPh2.List() = oPhone
        .cmbPh1.Value = oPh1
        .cmbPh2.Value = oPh2
        If oPaper = "L" Then
            .optL.Value = True
        Else
            .optA.Value = True
        End If
    End With
    End Sub
    
  4. Erstellen Sie ein Modul für Menüband-Steuerelemente. Fügen Sie diesem Modul eine Prozedur zum Anzeigen des UserForm-Formulars hinzu, und deklarieren Sie die Prozedur als Menüband-Steuerelement.

    Sub UserInfo(ByVal control As IRibbonControl)
    frmInfo.Show
    End Sub
    

Beachten Sie, dass in diesem Beispiel die Benutzerinformationen in der Registrierung gespeichert werden. Auf diese gespeicherten Informationen können bei Bedarf andere Add-Ins zugreifen, z. B. beim Erstellen benutzerdefinierter Inhalte für PowerPoint oder Excel. Der Code und das UserForm-Formular in diesem Beispiel hätten auch auf identische Weise in PowerPoint oder Excel erstellt werden können.

So erstellen Sie ein benutzerdefiniertes Dokument

  • Starten Sie diese Aufgabe mit einer Dokumentvorlage, z. B. dem Brief mit dem Branding des Unternehmens in diesem Beispiel. Der Code für dieses Beispiel generiert ein Dokument anhand der Vorlage. Anschließend passt der Code das Dokument basierend auf der Benutzereinstellung an und füllt Inhaltssteuerelemente, die im Text und der Fußzeile des Dokuments angezeigt werden, mit gespeicherten Benutzerinformationen auf.

  • Beachten Sie in Abbildung 3, dass diese Dokumentvorlage im Format Letter zwei Hintergrundformen aufweist (für den grau verlaufenden Hintergrund und für den roten Balken), die programmgesteuert angepasst werden müssen, wenn die Benutzereinstellung für das Papierformat A4 ist. Diese Formen wurden zur einfacheren Erkennung im Code im Bereich Markieren von Word 2010 benannt. Klicken Sie für den Zugriff auf den Bereich Markieren auf der Registerkarte Start in der Gruppe Bearbeiten auf Markieren.

  • In Abbildung 3 befinden sich der Name und Titel im Dokumenttext und die Adresse, Telefonnummer und E-Mail-Adresse (sowie die Beschriftungen für Telefonnummer und E-Mail-Adresse) in der Fußzeile in Inhaltssteuerelementen. Sie können Inhaltssteuerelemente auf der Registerkarte Entwicklertools in der Gruppe Steuerelemente einfügen. Klicken Sie in dieser Gruppe auf Entwurfsmodus, um auf den zu bearbeitenden Platzhaltertext zuzugreifen. Klicken Sie auf Eigenschaften, um Steuerelementeinstellungen anzupassen und z. B. die Tags hinzuzufügen, die zum Bestimmen von Inhaltssteuerelementen im nachfolgenden Code dienen.

    Hinweis

    In Word für Mac 2011 ist es nicht möglich, Steuerelemente zu erstellen oder mit diesen programmgesteuert zu interagieren. Erwägen Sie stattdessen das Arbeiten mit Tabellenzellen oder Textmarken als Referenzpunkte für das Auffüllen von Dokumentinhalten, wie in diesem Abschnitt gezeigt.

    Um eine Textmarke so hinzuzufügen, dass sie für den Benutzer ausgeblendet wird, setzen Sie vor den Namen der Textmarke einen Unterstrich, was allerdings nur programmgesteuert erfolgt kann. Klicken Sie dazu im Dokument auf die Stelle, an der Sie die Textmarke hinzufügen möchten, und fügen Sie dann im Direktfenster die Textmarke hinzu. Das folgende Codebeispiel enthält den Code zum Hinzufügen einer Textmarke an der ausgewählten Stelle.

    Selection.Range.Bookmarks.Add("_name")

    Abbildung 3. Vorlage, die der Code zum Generieren eines Dokuments verwendet

    Codevorlage zur Erstellung eines Dokuments

  • Den Code zum Generieren und Anpassen dieses Dokuments finden Sie im Anschluss. Es bietet sich an, ein gesondertes Modul für diesen Code zu erstellen, da es sich dabei wahrscheinlich um einen der verschiedenen Dokumenttypen handelt, die Benutzer anhand einer tatsächlichen Version eines Add-Ins wie diesem erstellen könnten. Sobald dieser Code fertig ist, fügen Sie eine Prozedur in das zuvor erstellte Menübandmodul ein, mit der Sie ein Menüband-Steuerelement zum Aufrufen dieses Makros deklarieren können.

    Sub NewLetter()
    On Error GoTo ErrorHandler
    Dim cc As ContentControl
    'If the user has not yet saved their information, prompt with that option.
    If GetSetting("CustomDocs", "Info", "Name") = "" Then
    i = MsgBox("Would you like to save your document details now, so that they " _
    & "can be added to your documents automatically?", vbQuestion + vbYesNoCancel, _
    "Custom Document Tools")
        If i = vbYes Then
        frmInfo.Show
        ElseIf i = vbCancel Then
        Exit Sub
        End If
    End If
    
    Call modVarbs.DocVarbs
    'set the defined Word.Document variable to the new document when it's created.
    'avoids errors related to multiple concurrent open documents.
    Set oDoc = Documents.Add(oPath & "\CompanyTools\CustomDocs\CompanyLetter.dotx")
    
    'if the saved paper size preference is A4, this changes the paper size and
    'then corrects the size and position of the background graphics in the header.
    If oPaper = "A" Then
    oDoc.PageSetup.PaperSize = wdPaperA4
        With oDoc.Sections(1).Headers(wdHeaderFooterFirstPage).Range
                With .ShapeRange("Backing")
                    .Width = 541.75
                    .Height = 841.95
                End With
                With .ShapeRange("Edge")
                    .Width = 53.2
                    .Height = 841.95
                    .Left = 542.5
                End With
        End With
    End If
    
    'populate the saved information in the controls provided in the template.
    For Each cc In oDoc.Range.ContentControls
        Select Case cc.Tag
            Case "Name"
            cc.Range.Text = oName
            Case "Title"
            cc.Range.Text = oTitle
        End Select
    Next cc
    
    For Each cc In oDoc.Sections(1).Footers(wdHeaderFooterFirstPage) _
    .Range.ContentControls
        Select Case cc.Tag
            Case "Address Line 1"
            cc.Range.Text = oAdd1
            Case "Address Line 2"
            cc.Range.Text = oAdd2
            Case "Label1"
            cc.Range.Text = oPh1
            Case "Label2"
            cc.Range.Text = oPh2
            Case "Phone1"
            cc.Range.Text = oPDat1
            Case "Phone2"
            cc.Range.Text = oPDat2
        End Select
    Next cc
    Exit Sub
    
    ErrorHandler:
    Select Case Err.Number
        Case 5174
        MsgBox "The document template is unavailable." & _
        " Please contact your local IT staff for assistance." _
        , vbInformation, "Custom Document Tools"
        Case Else
        MsgBox "The task ended in error. The template may be damaged. Note " & _
        " that your saved info may not have been added to the new document.", _
        vbInformation, "Custom Document Tools"
    End Select
    End Sub
    
  • In diesem Beispiel wurden ungebundene Inhaltssteuerelemente für die Benutzerinformationen verwendet. Je nach Anforderungen, z. B. wenn dieselben Benutzerinformationen an mehreren Stellen angezeigt werden müssen oder Informationen auf einem Deckblatt vorhanden sind, die mit einem anderen Deckblattbaustein getauscht werden müssen, sollten Sie gebundene Steuerelemente erwägen.

Erstellen der Benutzeroberfläche für das Add-In

Die Benutzeroberfläche des Add-Ins in diesem Beispiel enthält auf der Registerkarte Start rechts neben der Gruppe Absatz ein Steuerelement vom Typ "Unterteilte Schaltfläche" (siehe Abbildung 4). Befolgen Sie zum Erstellen dieser Menübandanpassung die Schritte 1-4 im vorherigen Beispiel zu customUI. Verwenden Sie für Schritt 2 das folgende Markup.

<?xml version="1.0" encoding="utf-8"?>
<customUI xmlns="https://schemas.microsoft.com/office/2006/01/customui">
  <ribbon>
    <tabs>
      <tab idMso="TabHome" >
        <group id="CustomDocs" label="Company Docs" 
               insertAfterMso="GroupParagraph" >
          <splitButton id="CompanyDocs" size="large" >
            <menu id="coDocs" >
              <button id="NewLetter" visible="true" label="New Letter" 
                      onAction="Letter" imageMso="NewPageShort"/>
              <button id="UserInfo" visible="true" label="Save Info" 
                      onAction="UserInfo" imageMso="ContactAddMyContacts"/>
            </menu>
          </splitButton>
        </group>
      </tab>
    </tabs>
  </ribbon>
</customUI>

Abbildung 4. Add-In-Anpassung auf der Registerkarte "Start"

Add-In-Anpassung auf der Registerkarte 'Start'

In diesem Beispiel wurden Inhaltssteuerelemente zum Auffüllen der gespeicherten Informationen verwendet. Sie können aber ähnlich vorgehen, um andere Objekte in einem Word-Dokument, einer PowerPoint-Präsentation oder Excel-Arbeitsmappe aufzufüllen. Sie können beispielsweise Inhalte in einer Tabellenzelle oder an einer Textmarke in einem Workflow-Dokument, in einem Textfeld in PowerPoint oder in einer Arbeitsblattzelle in Excel auffüllen.

Hinweis

Die im folgenden Abschnitt behandelten Anwendungsereignisse werden von Office für Mac 2011 nicht umfassend unterstützt. PowerPoint 2011 unterstützt keine Anwendungsereignisse, Word 2011 bietet nur eine sehr eingeschränkte Unterstützung. Sie können jedoch dieselben Schritte zum Einrichten des Moduls und Klassenmoduls in Excel für Mac 2011 befolgen und die in dieser Anwendung verfügbaren Anwendungsereignisse überprüfen. Hilfe zu den ersten Schritten mit Anwendungsereignissen in Word und Excel finden Sie im Hinweis, der auf die Prozedur im nächsten Abschnitt folgt. Beachten Sie weiter, dass Ereignisse auf Dokumentebene in Word 2011 und eine Auswahl von für Bildschirmpräsentationen spezifischen Makros in PowerPoint 2011 unterstützt werden.

Interaktion mit Anwendungsereignissen

Es kann zahlreiche Gründe geben, warum Ihr Add-In mit vordefinierten Aktionen interagieren soll, die in der Anwendung oder einem bestimmten Dokument erfolgen, sobald der Benutzer eine Datei druckt oder schließt. VBA bietet verschiedene Möglichkeiten der Interaktion mit Ereignissen, z. B. mit denjenigen, die auf Anwendungsebene erfolgen (d. h. unabhängig davon, welches Dokument geöffnet ist), und mit denjenigen, die auf Dokumentebene erfolgen (d. h. nur für ein bestimmtes Dokument gelten wie diejenigen, die auf einer bestimmten Vorlage basieren).

Ereignisse auf Dokumentebene werden in VBA häufiger für ein einzelnes Dokument oder eine Vorlage hinzugefügt. Und Sie können Code in Ihrem Add-In schreiben, der mit dem vordefinierten Verhalten des Dokuments oder der Vorlage interagiert. Doch Ereignisse auf Anwendungsebene sind häufig besser für Add-Ins geeignet, da sie direkt in Ihr Word-, PowerPoint- oder Excel-Add-In zum Interagieren mit Aktionen integriert werden können, die der Benutzer ausführt.

In diesem Beispiel wird untersucht, wie in PowerPoint ein Ereignis auf Anwendungsebene zum Überprüfen von Unternehmenspräsentationen erstellt werden kann, wenn der Benutzer die Datei schließt. Der Code führt eine Überprüfung auf mehrere Master in der Präsentation durch und bietet dem Benutzer die Möglichkeit, die Master programmgesteuert zu bereinigen und nur den ursprünglichen Master mit ordnungsgemäßen Branding in der Datei zu belassen.

Hinweis

Dieses Beispiel wird in diesem Artikel behandelt, da es zum Beheben des Anlasses einer häufigen Beschwerde von Benutzern beitragen kann, insbesondere in Unternehmen, die von einer Version mit älteren Dateiformaten (bis Office 2003) zu Office 2010 (oder Office 2007) migrieren. Wenn Benutzer Folien aus Präsentationen kopieren, die in einer früheren Version erstellt wurden, wählen sie oft den Befehl Ursprüngliche Formatierung beibehalten, da dieser scheinbar dafür sorgt, dass die Folie wie die anderen in der Präsentation aussieht. Dieser Befehl fügt allerdings einen weiteren Master hinzu und legt Layouts bei jeder seiner Verwendungen fest. Das Ergebnis sind Präsentationen mit einer sperrigen Anzahl von Masters, uneinheitlicher Formatierung und aufgeblasener Dateigröße, die Benutzer und Mitarbeiter des technischen Supports als beschädigte Dateien interpretieren. Ein dem Beispielcode ähnliches Tool kann genutzt werden, um dem Benutzer zu helfen, bevor Präsentationen schwierig zu verwalten werden, und ihn über die Folgen bestimmter Aktionen informieren.

Zum Erstellen eines Anwendungsereignisses müssen Sie einem vorhandenen Modul in Ihrem VBA-Projekt etwas Code hinzufügen und dann ein Klassenmodul für den Ereigniscode selbst hinzufügen. Im folgenden Beispiel wird auch ein UserForm-Objekt verwendet, damit eine Aktion erfolgen kann, die auf der Benutzereinstellung basiert.

So erstellen Sie in Ihrem Add-In ein Ereignis auf Anwendungsebene

  1. Klicken Sie zum Erstellen eines Klassenmoduls auf der Registerkarte Einfügen auf Klassenmodul. Geben Sie dem Klassenmodul im Fenster Eigenschaften einen aussagekräftigen Namen, z. B. Ereignisklassenmodul.

  2. Fügen Sie einem vorhandenen Modul in Ihrem Projekt Code hinzu, um das neue Klassenmodul zu instanziieren. Dies erfordert nur eine Deklaration (beachten Sie das Verwenden des Klassenmodulnamens in der Dim-Anweisung oben im Modul) und zwei kleine Prozeduren.

    Dim XMST As New EventClassModule
    Sub Auto_Open()
    Call InitializeMSTApp
    End Sub
    
    Sub InitializeMSTApp()
    Set XMST.app = Application
    End Sub
    
  3. Erstellen Sie das UserForm-Formular, mit dem die Benutzer gefragt werden, ob die Master aus der Präsentation entfernt werden sollen. In diesem Beispiel wird ein UserForm-Formular anstelle eines einfachen Meldungsfelds verwendet, um dem Benutzer eine zusätzliche Option zu bieten.

    Befolgen Sie zum Erstellen eines UserForm-Formulars die Tipps im vorherigen Abschnitt. Das fertige UserForm-Formular hat eine Beschriftung, zwei Befehlsschaltflächen und ein Kontrollkästchen (siehe Abbildung 5).

    Abbildung 5. Fertiges UserForm-Formular für das Anwendungsereignis

    Ausgefülltes UserForm-Formular für das Anwendungsereignis

  4. Der Code hinter dem UserForm-Formular ermöglicht in diesem Fall die Ausführung des Ereigniscodes zum Fortfahren (cmdYes) oder entlädt das Formular und beendet die Ausführung (cmdNo) der Option zum Hinzufügen einer Dokumenteigenschaft zur Datei, die bewirkt, dass der Benutzer beim Bearbeiten derselben Datei (chkDontFix) nicht mehr zur Angabe aufgefordert wird. Außerdem übergibt die Terminate-Prozedur einen Wert an den Ereigniscode mit der Anweisung, nicht fortzufahren, wenn der Benutzer auf das X auf der Titelleiste klickt, um das Dialogfeld zu schließen.

    Private Sub cmdNo_Click()
    If Me.chkDontFix.Value = True Then
        With ActivePresentation
            .CustomDocumentProperties.Add Name:="DontFix", _
            LinkToContent:=False, Type:=msoPropertyTypeBoolean, Value:=True
            .Saved = msoFalse
        End With
    End If
    Unload Me
    End Sub
    
    Private Sub cmdYes_Click()
    Me.Hide
    End Sub
    
    Private Sub userform_Terminate()
    oCncl = True
    End Sub
    
  5. Deklarieren Sie zum Hinzufügen des Codes für das Ereignis oben im Klassenmodul eine Anwendungsvariable für die Verwendung mit Ereignissen. Fügen Sie anschließend die Prozedur hinzu. In diesem Fall ist das PresentationClose-Ereignis die verwendete Prozedur.

    Beachten Sie, dass im folgenden Code zwei zusätzliche Variablen verwendet werden: oCncl als Boolean und i als Integer. Um diese Variablen für die Verwendung im gesamten Projekt öffentlich zu deklarieren, müssen Sie sie oben in einem beliebigen herkömmlichen Modul deklarieren.

    Public WithEvents app As Application
    Private Sub app_PresentationClose(ByVal Pres As Presentation)
    Dim oProp As DocumentProperty
    oCncl = False
    i = 0
    'checks if the active presentation is a branded company
    'presentation. In this case, a document property is included
    'in the template for company presentations for ease of
    'identification.
    With ActivePresentation
        For Each oProp In .CustomDocumentProperties
            If oProp.Name = "CompanyPres" Then i = i + 1
        Next oProp
        If i = 0 Then Exit Sub
    'checks for the DontFix property added when the user
    'selects the check box in the user form.
        For Each oProp In .CustomDocumentProperties
            If oProp.Name = "DontFix" Then Exit Sub
        Next oProp
    'checks the presentation for the number of masters.
    'If only one master exists, there is no need to continue.
        If .Designs.Count = 1 Then Exit Sub
    End With
    'initiates the UserForm.
    With frmMasters
        .chkDontFix.Value = False
        .cmdYes.SetFocus
        .Show
    End With
    
    If oCncl = True Then
        Exit Sub
    End If
    
    Dim oDes As Design, oSd As slide
    'attaches all slides to the first master.
    With ActivePresentation
        For Each oSd In .Slides
            oSd.Design = .Designs(1)
        Next oSd
    'deletes all masters other than the first.
        Do Until .Designs.Count = 1
            For Each oDes In .Designs
                If Not oDes.Index = 1 Then oDes.Delete
            Next oDes
        Loop
    End With
    End Sub
    

Nachdem Sie diese Datei als Add-In gespeichert und in PowerPoint geladen haben, benötigen Sie eine Präsentation, die die Variable CompanyPres und mehr als einen Master enthält, um Ihr Add-In zu testen. Verwenden Sie hierzu das Beispieldokument im Download zu diesem Artikel. Erstellen Sie ferner mithilfe der Vorlage eigene Testpräsentationen.

Hinweis

Sie können die vorherigen Schritte 1 und 2 auch in Word oder Excel ausführen, um ein Klassenmodul für Anwendungsereignisse einzurichten. Der Code in Schritt 2 ist für alle Programme identisch, und Sie können dieselbe Public WithEvents app As Application-Anweisung oben im Klassenmodul im Visual Basic-Editor für Word oder Excel verwenden, um eine Variable für das Arbeiten mit Anwendungsereignissen zu deklarieren. Wählen Sie im Anschluss app in der Objektliste (der Dropdownliste links oben im Codefenster) aus, woraufhin in der Prozedurliste (der Dropdownliste rechts oben im Codefenster) verfügbare Ereignisse angezeigt werden.

Programmgesteuertes Kontrollieren des Add-Ins

Beim Erstellen einer benutzerdefinierten Benutzeroberfläche für Ihr Add-In benötigen Sie ggf. gelegentlich mehr Kontrolle über das Aussehen der Benutzeroberfläche, als das Office Open XML-Markup allein bieten kann. Beschriftungstext für ein Steuerelement kann beispielsweise basierend auf bestimmten Bedingungen variieren, oder die Sichtbarkeit von Steuerelementen kann aufgrund von Benutzereinstellungen unterschiedlich sein. Glücklicherweise bietet das customUI-Schema eine Auswahl von Attributen, die Ihnen diese Flexibilität bieten.

Im folgenden Szenario verfügt ein Unternehmen im Menüband über eine Gruppe benutzerdefinierter Tools für Excel. Einige Benutzer möchten die Registerkarte anzeigen, andere nicht. Das Add-In fragt den Benutzer beim Programmstart, ob die benutzerdefinierte Registerkarte angezeigt werden soll. Wenn der Benutzer die benutzerdefinierte Registerkarte nicht anzeigen möchte, bietet das Add-In ein Steuerelement am Ende der Registerkarte Start, über das der Benutzer die Anzeige dieser Registerkarte ändern kann.

Dieses VBA-Projekt erfordert ein Modul, in dem die Prozeduren für das Menüband-Steuerelement abgelegt werden, ein UserForm-Formular zum Abrufen der Benutzereinstellung und Code im ThisWorkbook-Objekt des Add-Ins, in dem Sie das Ereignis erstellen können, das den Code beim Start von Excel durch den Benutzer ausführt.

Das folgende Verfahren erfordert, dass Sie bereits über das customUI.xml-Markup für sowohl die benutzerdefinierte Menüband-Registerkarte als auch das Zurücksetzungssteuerelement verfügen, das für Benutzer angezeigt wird, die die Registerkarte anfänglich nicht wünschten.

So kontrollieren Sie das Anpassungsverhalten des Menübands programmgesteuert

  1. Erstellen Sie das UserForm-Objekt, das die Benutzer beim Start von Excel nach der gewünschten Einstellung befragt.

    Wie im vorherigen Abschnitt wird in diesem Beispiel ein UserForm-Objekt anstelle eines Meldungsfelds verwendet, um dem Benutzer eine zusätzliche Option zu bieten.

    Abbildung 6. Fertiges UserForm-Objekt für das Ereignis beim Öffnen der Arbeitsmappe

    Ausgefülltes UserForm-Formular für das Workbook_Open-Ereignis

  2. Fügen Sie den Code hinter dem UserForm-Objekt hinzu, der den Wert der Variablen festlegt, die die Benutzereinstellung angibt. Beachten Sie, dass diese Variable als Zeichenfolge in einem normalen Modul im Projekt öffentlich deklariert werden muss.

    Private Sub cmdNever_Click()
    oVis = "Never"
    Me.Hide
    End Sub
    
    Private Sub cmdNo_Click()
    oVis = "No"
    Me.Hide
    End Sub
    
    Private Sub cmdYes_Click()
    oVis = "Show"
    Me.Hide
    End Sub
    
  3. Fügen Sie im ThisWorkbook-Objekt des Projekts ein Workbook_Open-Ereignis hinzu. Der hier gezeigte Code zeigt das Dialogfeld an, wenn der Benutzer nicht bereits angegeben hat, dass er nicht mehr dazu befragt werden möchte. Dann zeigt der Code das Dialogfeld an und speichert die neu gewählte Einstellung des Benutzers (Ja, Nein oder Nie) in der Registrierung.

    Private Sub Workbook_Open()
    Dim iResp As Integer
    oVis = GetSetting("CustomDocs", "Info", "ExcelVis")
    If Not oVis = "Never" Then
        frmTools.Show
        SaveSetting "CustomDocs", "Info", "ExcelVis", oVis
    End If
    End Sub
    

    Beachten Sie hier, dass das ThisWorkbook-Objekt für Add-Ins in Excel besonders nützlich ist, da es auf Anwendungsebene das Verwenden von Ereignissen auf Dokumentebene ermöglicht. Da ThisWorkbook sich auf die Add-In-Datei selbst bezieht, wird das im folgenden Codebeispiel verwendete Workbook_Open-Ereignis ausgeführt, wenn die Anwendung gestartet wird und die Add-In-Datei automatisch lädt bzw. öffnet.

  4. Fügen Sie in einem neuen oder vorhandenen Modul im Projekt die Prozeduren hinzu, die mit der customUI-Datei interagieren.

    Bei diesem Beispiel werden mithilfe einer Prozedur die Sichtbarkeitseinstellungen festgelegt, die an die customUI-Datei übergeben werden. Die andere Prozedur wird für das Steuerelement verwendet, das angezeigt wird, wenn der Benutzer keine Nachfragen zu den Sichtbarkeitsoptionen wünscht, damit die Option später geändert werden kann.

    Beachten Sie, dass die ShowControls-Prozedur auf die Steuer-IDs in der Datei customUI.xml verweist. Die erste ist in diesem Fall die für die benutzerdefinierte Registerkarte bereitgestellte ID, die zweite ist die ID, die der optionalen Zurücksetzungsschaltfläche bereitgestellt wird, die der Registerkarte Start hinzugefügt wird.

    Public Sub ShowControls(ByVal control As IRibbonControl, ByRef visible As Variant)
    Select Case control.ID
        Case "TabCompany"
            If Not oVis = "Show" Then
                visible = False
            Else
                visible = True
            End If
        Case "CustomTools"
            If oVis = "Never" Then
                visible = True
            Else
                visible = False
            End If
    End Select
    End Sub
    
    Sub Reset(ByVal control As IRibbonControl)
    SaveSetting "CustomDocs", "Info", "ExcelVis", ""
    MsgBox "You will be prompted to show " & _
    "company tools the next time you start Excel.", _
    vbInformation, "Company Custom Tools"
    End Sub
    
  5. Fügen Sie in der Datei customUI.xml das GetVisible-Attribut dem Tag für Ihre benutzerdefinierte Registerkarte und dem Tag für die Gruppe hinzu, in der die Zurücksetzungsschaltfläche angezeigt wird. Wählen Sie als Wert für beide den Prozedurnamen ShowControls.

    Zuerst folgt das Markup nur für die zwei bearbeiteten Zeilen. Die zweite Markupgruppe zeigt diese Zeilen im Kontext.

    <tab id="TabCompany" label="Company Tools" insertBeforeMso="TabHome" getVisible="ShowControls">
    <group id="CustomTools" label="Company Options" getVisible="ShowControls">
    

    Wie Sie sehen, wird auf der benutzerdefinierten Registerkarte im nächsten Beispiel eine beliebige Auswahl vordefinierter Befehle verwendet, da es der Zweck dieses Beispiels ist, das Sichtbarkeitssteuerelement für die Registerkarte selbst zu zeigen.

    <?xml version="1.0" encoding="utf-8"?>
    <customUI xmlns="https://schemas.microsoft.com/office/2006/01/customui">
     <ribbon>
     <tabs>
      <tab id="TabCompany" label="Company Tools" insertBeforeMso="TabHome"
           getVisible="ShowControls">
        <group id="coTools" label="Sample Tools" 
               supertip="Arbitrarily selected tools to demo GetVisible behavior.">
         <button idMso="FileNewDefault" size="large" />
         <button idMso="FileSave" size="large"/>
         <separator id="space2" />
         <button idMso="Paste" size="large"/>
         <gallery idMso="PasteGallery" size="large" />
        </group>
      </tab>
      <tab idMso="TabHome" >
         <group id="CustomTools" label="Company Options" 
                getVisible="ShowControls">
           <button id="coRestore" size="large" label="Reset" 
                   onAction="Reset" imageMso="GroupJournalArrangement" />
         </group>
      </tab>
     </tabs>
     </ribbon>
    </customUI>
    

Verwalten des VBA-Codes

Wenn Ihr Add-In fertig und zur Freigabe bereit ist, können Sie das Projekt in einem weiteren Schritt digital signieren. VBA bietet für das Signieren von Code zwei Optionen: die Selbstzertifizierung und die authentifizierte Zertifizierung.

Die Selbstzertifizierung ist schnell eingerichtet und einfach zu nutzen, doch dient sie nicht zur Bestätigung Ihrer Identität. Wenn Sie mit einem Unternehmen zusammenarbeiten, in dem Code signiert sein muss, müssen Sie zumeist von einer vertrauenswürdigen kommerziellen Zertifizierungsstelle ein authentifiziertes Zertifikat erwerben.

Wählen Sie zum Einrichten der Selbstzertifizierung Digitales Zertifikat für VBA-Projekte aus (Start, Alle Programme, Microsoft Office, Microsoft Office-Tools).

Im Dialogfeld Digitales Zertifikat für VBA-Projekte finden Sie auch eine kommerzielle Zertifizierungsstelle, bei der Sie ein zu authentifizierendes Zertifikat erwerben können. Klicken Sie auf den entsprechenden Link, um eine Liste der Anbieter einzublenden.

Nächste Schritte

In diesem Artikel wurden die Grundlagen zum Erstellen eines VBA-Add-Ins für Word, Excel oder PowerPoint vermittelt. Anhand von Beispielen wurden grundlegende Konzepte vorgestellt, die Sie in Ihren Add-Ins für eine Vielzahl von Aufgaben umsetzen können. Freilich kann in einem einzigen Artikel nicht der gesamte Funktionsumfang einer so leistungsstarken Programmiersprache wie VBA vorgestellt werden. Bevor Sie annehmen, dass verwalteter Code für ein neues Projekt benötigen wird, ziehen Sie VBA in Betracht, und prüfen Sie, welcher Ansatz die einfachste Lösung für die vorliegende Aufgabe bietet.

Entwickler gehen meist davon aus, dass eine Lösung in einem Codefenster begonnen werden muss. Doch denken Sie daran, dass die Programme, die Sie (ob mit verwaltetem Code oder VBA) automatisieren, schon an sich leistungsfähig und flexibel sind. Für eine Lösung, die eine einfache Automatisierung benötigt, gibt es ggf. eine einfache Lösung ohne Code (bzw. ohne das, was wir üblicherweise für Code halten). Beispielsweise können gebundene Inhaltssteuerelemente oder Feldcodes in Word in großem Maß dynamisches Verhalten ermöglichen, was auch für Funktionen in Excel gilt. Unabhängig davon, ob Ihre Projekte von VBA oder von Features in den Anwendungsfenstern profitieren können, müssen Sie Ihre Optionen berücksichtigen, die Anforderungen prüfen und dann die besten Tools für die jeweilige Aufgabe (projektbezogen) bestimmen.

Was tun Sie also, wenn Sie ein Projekt in verwaltetem Code oder in VBA beginnen und mittendrin merken, dass ein anderer Ansatz besser wäre? In den folgenden zusätzlichen Ressourcen finden Sie Informationen zur Konvertierung zwischen VBA und verwaltetem Code.

Weitere Ressourcen

Informationen zur Autorin

Stephanie Krieger ist Autorin der beiden Bücher "Advanced Microsoft Office Documents 2007 Edition Inside Out" und "Microsoft Office Document Designer". Als professionelle Beraterin für die Dokumenterstellung und -verwaltung hat sie viele weltweit operierende Unternehmen bei der Entwicklung von Microsoft Office-Lösungen auf beiden Plattformen unterstützt. Ihr neues Buch zu Office 2010 und Office für Mac 2011 wurde im Mai 2011 veröffentlicht.