DatenbankManufaktur

Outlook mit VBA-Makros erweitern

Ich verschicke häufiger Screenshots per Outlook. Damit diese sich – gerade bei einem Ausschnitt ohne Rand – vom Hintergrund abheben, versehe ich sie nach dem Einfügen in Outlook mit einem Schatten und/oder Rahmen. Dazu brauche ich dann jedes Mal ein Dutzend Klicks im Seitenmenü 'Grafik formatieren'. Das muss doch auch schneller gehen?!

Ein Makro in Outlook aufzeichnen geht nicht und im Objektmodell habe ich auch nichts Passendes gefunden. Durch Zufall stieß ich in Michael Bauers VBOffice.net externer Link auf ein Beispiel, wie man Word-Makro in Outlook nutzen kann (https://www.vboffice.net/de/developers/word-makro-in-outlook-nutzen externer Link). Da Word für formatierte Mails im Hintergrund als Editor verwendet wird, sollte man somit in Outlook auch (fast) alles machen können, was man in Word auch tun kann.

Obwohl sich die gewünschte Bildbearbeitung auch in Word nicht als Makro aufzeichnen ließ, habe ich mir mit Google, dem Objektexplorer und dem Direktbereich alle notwendigen Befehle und Parameter zusammengesucht und getestet. Als in Word alles wie gewünscht funktionierte, habe ich die Funktionen nach Outlook übertragen.

Dort habe ich die Outlook-VBE (per Alt + F11) geöffnet und den Verweis auf die vorhandene Microsoft Word Object Library gesetzt, um die Word-Befehle mit Early-Binding und die dort definierten Konstanten verwenden zu können. Dann habe ich mir ein neues Modul und eine neue Prozedur angelegt. In diese habe ich den Modulkopf und den Inhalt des Word-Makros kopiert. Jetzt nur noch das Menüband angepasst und das Makro hinterlegt – et voilà: täglich ein paar Mausklicks gespart.

Menüband mit Makro

PS: Achten sie auf die Makroeinstellungen in Outlook. Beim ersten Erstellen von Makros wird dieses problemlos ausgeführt. Nach dem nächsten Start von Outlook ziehen dann aber die Optionen im TrustCenter, die standardmäßig keine Makros zulassen.

Code

Und so sieht eines meiner Outlook-Format-Makros aus:

Sub sBildSchatten()
' Schatten hinter alle gewählten Bilder legen
   Dim Ins As Outlook.Inspector
   Dim Document As Word.Document
   Dim Word As Word.Application
   Dim Selection As Word.Selection

   Dim img As InlineShape
   Dim i As Integer

   Set Ins = Application.ActiveInspector
   Set Document = Ins.WordEditor
   Set Word = Document.Application
   Set Selection = Word.Selection

   For i = 1 To Selection.InlineShapes.Count
      Set img = Selection.InlineShapes(i)
      With img
         ' Schatten
         .Shadow.Blur = 100
         .Shadow.ForeColor = 0
         .Shadow.OffsetX = 10
         .Shadow.OffsetY = 10
         .Shadow.Type = 21
         .Shadow.Transparency = 0.5
         .Shadow.Size = 100
      End With
   Next i
End Sub