Beim Senden einer E-Mail in Outlook (egal ob neue Nachricht, Antwort oder Weiterleitung) führt der Mailclient oft ungewollte Änderungen an der Schriftart und Schriftgröße, dem Zeilenabstand etc. durch. Er richtet sich dabei nach der Formatierung der letzten E-Mail oder nach der Standardformatierung. Das Problem betrifft insbesondere die Absatzeinstellungen.
In MS Word und anderen Schreibprogrammen drückt man auf die Eingabe-Taste, um einen neuen Absatz zu beginnen. Für eine neue Zeile drückt man gleichzeitig auf Umschalt + Eingabe. In Outlook ist das kein Unterschied. Egal ob man die Eingabe oder Umschalt + Eingabe drückt, es wird eine neue Zeile erstellt. Für einen Absatz muss der Anwender 2x die Taste drücken. Es führt dazu, dass der Text je nach Mailclient unterschiedlich dargestellt wird.
Anstatt die Eingabe-Taste zweimal zu drücken, kann man die Standardformatierung, also den normalen Stil in Outlook anpassen. Der Nachteil ist, dass der normale Stil nur für neue Nachrichten, also nicht für Antworten und Weiterleitungen, angewendet wird.
Ein anderer möglicher Ansatz wäre, einen benutzerdefinierten Stil zu hinterlegen, welcher im Gegensatz zu dem normalen Stil auch für Antworten und Weiterleitungen greift. Auch diese Lösung hat eine Schwachstelle, denn der neue Stil wird nicht als Standard festgelegt, sondern muss beim Öffnen des E-Mail-Fensters jedes Mal neu ausgewählt werden.
Die vollständige Lösung ist also ein benutzerdefinierter Stil, welcher durch ein Outlook-Makro als Standard gesetzt wird und sowohl für neue E-Mails als auch für Antworten / Weiterleitungen greift. Nachfolgend finden Sie eine detaillierte Anleitung für die Config.
Zunächst definieren Sie Ihren Stil. Dafür erstellen Sie in Outlook eine neue E-Mail und tippen Sie ein paar Worte ein. Markieren Sie Ihren Text und in dem eingeblendeten Menü gehen Sie auf Styles, Create a style.
Es wird ein Fenster geöffnet, wo Sie Ihren Stil benennen können, z.B. Custom Style 1. Anschließend gehen Sie auf Modify, um die Formatierung anzupassen. Nachstehend finden Sie einen Screenshot mit allen Einstellungen, die greifen sollen. In aller Kürze sind es:
- Die Option Style based on muss auf (no style) eingestellt werden
- Unter Formatting definieren Sie die Schriftart und Schriftgröße, z.B. Arial, 11
- Die Option New documents based on this template muss eingecheckt werden
- Klicken Sie auf den Button Format und öffnen Sie das Fenster Paragraph. Unter Spacing setzen Sie den Wert After auf 12 pt, Line spacing auf At least und den Wert At auf 14 pt.
Alle Änderungen bestätigen Sie mit OK, um zu Ihrer E-Mail zurückzugelangen. Senden Sie sie an sich selbst oder an eine andere E-Mail-Adresse. Dasselbe tun Sie für Antworten und Weiterleitungen. Zum Schluss testen Sie Ihren neuen Stil an unterschiedlichen Nachrichten, insbesondere an jenen, die von anderen Anwendern kommen.
Mit einem Makro legen Sie Ihren benutzerdefinierten Stil als Standard fest. Tun Sie Folgendes:
- In der Multifunktionsleiste gehen Sie zum Tab Developer.
- Klicken Sie auf Macro Security, Enable all macros.
- Klicken Sie auf den Button Visual Basic. Im VB-Fenster gehen Sie auf Tools, References.
Stellen Sie sicher, dass in der Liste Available References folgende Optionen vorhanden sind:
- Visual Basic For Applications
- Microsoft Outlook 15.0 Object Library
- OLE Automation
- Microsoft Office 15.0 Object Library
- Microsoft DAO 3.6 Object Library
- Microsoft Word 15.0 Object Library
WICHTIG: Einige Bibliotheken werden mit Versionsnummer angezeigt, welche von der Version Ihrer MS Office-Suite abhängt. Für MS Office 2013 ist das die Version 15.0, für Office 2010 die 14.0, und für Office 2007 die 12.0. Die Microsoft DAO Object Library ist gleich für alle Office-Suiten.
- Wenn alle Referenzen vorhanden sind, klicken Sie auf den Button OK.
- Bleiben Sie in Visual Basic und öffnen Sie das Projektfenster, indem Sie das Projektverzeichnis links ausrollen und 2x auf ThisOutlookSession klicken:
- In das eingeblendete Fenster fügen Sie diesen Makro-Code ein:
Public WithEvents OutlookInspectors As Outlook.Inspectors Public WithEvents myOlExp As Outlook.Explorer Public WithEvents myIns As Outlook.Inspector 'startup Outlook Private Sub Application_Startup() Set OutlookInspectors = Application.Inspectors Set myOlExp = Application.ActiveExplorer End Sub Private Sub OutlookInspectors_NewInspector(ByVal Inspector As Inspector) Set myIns = Inspector End Sub Private Sub myOlExp_InlineResponse(ByVal item As Object) 'Change the name of the style to your own 'The name is case sensitive Dim objStyleName As String objStyleName = "Custom Style 1" Dim objEditor As Word.Document Dim objStyle As Word.Style 'Check if the message is Plain Text. If so - end the macro as Plain Text does not support styles 'Bodyformat: '1 - plain text '2 - html '3 - rtf If ActiveExplorer.ActiveInlineResponse.BodyFormat = 1 Then Exit Sub Set objEditor = ActiveExplorer.ActiveInlineResponseWordEditor Set objStyle = objEditor.Styles.item(objStyleName) 'No need to set the same style again - it can break copy-paste option and duplicate text 'If you have changed style to other than defined in objStyleName program can still duplicate text If objEditor.Windows(1).Selection.Style = objStyle Then Exit Sub objEditor.Windows(1).Selection.Style = objStyle Set objEditor = Nothing Set objStyle = Nothing End Sub Private Sub myIns_Activate() 'Change the name of the style to your own 'The name is case sensitive Dim objStyleName As String objStyleName = "Custom Style 1" If myIns.IsWordMail() = False Then Exit Sub Dim objEditor As Word.Document Dim objStyle As Word.Style Dim objItem As Object Set objItem = myIns.CurrentItem 'Check if object is empty If objItem Is Nothing Then Exit Sub 'Check the type of the item np. Meeting request Dim iStringPos As Integer iStringPos = InStr(objItem.MessageClass, "IPM.Note") If iStringPos = 0 Then Exit Sub 'If the object is flagged as sent, it means this is the uneditable content If objItem.Sent = "True" Then Exit Sub 'Check if the message is Plain Text. If so - end the macro as Plain Text does not support styles 'Bodyformat: '1 - plain text '2 - html '3 - rtf If objItem.BodyFormat = 1 Then Exit Sub If myIns.EditorType = olEditorWord Then Set objEditor = myIns.WordEditor Set objStyle = objEditor.Styles.item(objStyleName) If objStyle Is Nothing Then Exit Sub 'No need to set the same style again - it can break copy-paste option and duplicate text 'If you have changed style to other than defined in objStyleName program can still duplicate text If objEditor.Windows(1).Selection.Style = objStyle Then Exit Sub objEditor.Windows(1).Selection.Style = objStyle End If Set objEditor = Nothing Set objStyle = Nothing Set objItem = Nothing End Sub
Ändern Sie den Stilnamen wie in den Makro-Kommentaren beschrieben. In diesem Fall Custom Style 1.
- Speichern Sie das Projekt, indem Sie auf das blaue Disketten-Symbol klicken, oder drücken Sie Strg + S.
- Starten Sie Outlook neu.
Das war’s – von nun an wird Ihr Stil angewendet, jedes Mal wenn Sie in Outlook eine Nachricht verfassen. Das gilt auch für den Fall, dass Sie auf eine E-Mail mit abweichender Formatierung antworten. Auf diese Weise stellen Sie sicher, dass das Design Ihrer Korrespondenz immer gleich bleibt.
@Tomek Stempniewicz:
Danke für den Hinweis, funktioniert leider nicht in Outlook 2003. Im Code sind zwar keine “versionsabhängigen” Bibliotheks-Referenzen ersichtlich, aber einige Klassen dürfte es in Outlook / Office 2003 noch nicht geben. Die erste Fehlermeldung “Automatisierungsfehler – Bibliothek nicht registriert” tritt in der Zeile “Set objEditor = myIns.WordEditor” auf. Hätte versucht, es mit ChatGPT umzuschreiben, leider ohne Erfolg ;-)
Hallo Martin,
Prüfe bitte, ob im VB Editor (Tools > References) das Kontrollkästchen neben “Microsoft Office 11.0 Object Library” angeklickt ist.
Gibt es auch eine Version für Outlook 2003?
Hallo Martin,
Das Verfahren sollte ähnlich im Fall von Outlook 2003 aussehen. Der Unterschied besteht in der Versionsnummer der bei dem Makro zu verwendenden Bibliotheken. Im Fall von Office 2003 ist dies „11.0“, z. B. Microsoft Outlook 11.0 Object Library.
Hallo Jarek,
statt Outlook 2016 auf Windows 10 öffnet sich der VBA Editor
und markiert die erste Zeile
Public WithEvents OutlookInspectors As Outlook.Inspectors
mit der Meldung
Compile Error:
Invalid attribute in Sub or Funktion
Hallo Matthias,
Hast du geprüft, ob alle notwendigen References im VB Editor (Tools>References) aufgelistet und die Kontrollkästchen daneben angeklickt sind?
Siehe bitte diesen Abschnitt im obigen Beitrag.
Grüße,
Kamil
Hallo Jarek,
super Erklärung und Anleitung. Leider klappt das bei mir nur bedingt. Nach Aktivierung des Makros kommt es bei Klick auf ein Mail im Posteingang zu “Laufzeitfehler 4605: Diese Methode oder Eigenschaft ist nicht verfügbar, weil das Dokument für die Bearbeitung gesperrt ist.” Bei Debuggen wird diese Zeile markiert: objEditor.Windows(1).Selection.Style = objStyle
Kann das irgendwie gelöst werden?
Vielen Dank für die Hilfe.
Beste Grüße
Josef
Hallo Josef,
dieser Artikel von Microsoft beschreibt den Umgang mit diesen Fehler.
Grüße,
Paweł
Hallo Jarek,
das hat für die Mails gut geklappt, obwohl Visual Basic 7.1 in Outlook 365 einen Fehler beim Laden gemeldet hat bei der DLL “Microsoft DAO 3.6 Object Library”.
Allerdings wird im Kalender bei einem neuen Termin, wenn ich unter “Meine Vorlagen” eine Vorlage benutze, immer noch Calibri 11 ausgegeben. Gibt es hierfür vielleicht eine Lösung?
Vielen Dank für die Hilfe.
Beste Grüße
Fritz
Gut erklärt, funktioniert leider gar nicht. Stilname ist geändert, der Stil entsprechend meinen Wünschen formatiert, und wenn das Makro ausgeführt wurde, ist zwar das Format richtig zugewiesen, aber die Schrift ist wieder Calibri. In der normalEmail.dotm stimmt das Format (Schrift und Größe).
LG
K.
Hallo Jarek,
wenn ich das 1 zu 1 nachmache bekomme ich in Outlook (Office 365) seinen Syntaxfehler, der in dieser Zeile markiert wird
“Private Sub myIns_Activate()”
kannst du mir da weiterhelfen ?
Vielen Dank
Hallo Martin,
hast du den Stilnamen in dem Code geändert wie in den Makro-Kommentaren beschrieben? Genau geht es um dieses Stück:
Private Sub myIns_Activate()
‘Change the name of the style to your own
‘The name is case sensitive
Dim objStyleName As String
objStyleName = “Custom Style 1”
Grüße,
Pawel
Danke, gut erklärt und funktioniert! Topp!