VBA-Praxis: Alle Outlook-E-Mails ungelesen setzen

Um den Workflow in einem gemeinam genutzen E-Mail-Postfach zu optimieren, ist es hilfreich, noch offene E-Mails als “ungelesen” zu markieren. Hierfür gibt es verschiedene Möglichkeiten. Eine davon ist das Erstellen eines Buttons, der es ermöglicht, diese mit nur einem Klick zu markieren.

bilder/E-Mail-Postfach-ungelesene-und-gelesene-Mails.png

E-Mail-Postfächer eines Team lassen sich am Besten gemeinsam bearbeiten wenn sie übersichtlich gegliedert sind und so jedes Teammitglied auf einen Blick sieht, welche Aufgaben noch bearbeitet werden müssen. Ein Beispiel für einen solchen Aufbau habe ich bereits im vorherigen Beitrag “Workflow in Team-Postfächern optimieren” beschrieben. In diesem zweiten Teil zeige ich, wie Nachrichten als “ungelesen” markiert bleiben, damit sofort ersichtlich ist, in welchem Ordner wie viel “zu tun” ist. Denn nur wenn eine E-Mail bearbeitet wurde, soll sie als gelesen markiert und die Zahl hinter dem Ordner reduziert werden.

Gliederung eines Team-Postfachs ohne ungelesene E-MailsGliederung eines Team-Postfachs mit ungelesenen E-Mails

Es gibt drei Möglichkeiten, wie man E-Mails als ungelesen markieren kann:

 

1) Jede E-Mail nach der Bearbeitung auf ungelesen setzen.

Outlook-Button: Als ungelesen markieren

Nachteil: Dies muss für jede E-Mail durchgeführt werden.

 

2) Nie mehr eine Mail als ungelesen markieren.

Diese Einstellung findet man unter: Datei ⇒ Optionen ⇒ E-Mail ⇒ Lesebereich… ⇒ Alle Häkchen in der Maske “Lesebereich” entfernen.

Outlook: Lesebereichoptionen

Nachteil: Im eigenen Postfach ist es praktischer, wenn gelesene Nachrichten auch als gelesen markiert werden.

 

3) Erstellen eines Buttons, der automatisch alle Nachrichten in gewünschten Ordnern und Unterordnern nach getaner Arbeit als ungelesen markiert.

Outlook: Alle E-Mails als ungelesen markieren

Nachteil: keine

 

Hier ein Video und eine Schritt-für-Schritt-Anleitung, wie Sie einen solchen Button erstellen:

Öffnen Sie im ersten Schritt die entsprechenden Optionen-Einstellungen: “Datei” ⇒ “Optionen”

Outlook: Kontoinformation

⇒ “Trust Center” ⇒ “Einstellungen für das Trust Center….”
Outlook: Einstellungen Trust Center

⇒ “Makroeinstellungen” ⇒ “Benachrichtigungen für alle Makros” aktivieren

Outlook: “Benachrichtigungen für alle Makros” aktivieren

Aktivieren Sie anschließend das Menüband “Entwicklertools”:

“Datei” ⇒ “Optionen” ⇒ “Menüband anpassen” ⇒ Häkchen bei “Entwicklertools” setzen
Outlook: Menüband anpassen

Starten Sie nun Outlook neu. Im Anschluss müssen Sie “Visual Basic” im Menüband “Entwicklertools” starten.
Outlook: Visual Basic Button

Evtl. müssen Sie eine Sicherheitswarnung bestätigen (natürlich nur, wenn man selbst ein eigenes Makro bearbeiten oder aufrufen will, nicht wenn es bei fremden E-Mails oder einfach so erscheint):
Outlook: Sicherheitshinweis beim Aktivieren von Makros

Fügen Sie ein neues “Modul” ein:
Outlook: Neues Modul hinzufügen

Kopieren Sie dann folgenden Code:
Outlook: Code zum Hinzufügen eines Buttons, um Nachrichten als ungelesen zu markieren


Option Explicit
Dim readMessages
Dim readFolder

Public Sub MarkAllItemsAsUnread()
    Dim objStores As Outlook.Stores
    Dim objStore As Outlook.Store
    Dim objOutlookFile As Outlook.Folder
    Dim objFolder As Outlook.Folder
    Dim startzeit
    MsgBox "OK klicken, um nach gelesenen Nachrichten zu suchen...", , "MarkAllItemsAsUnread"
    startzeit=Timer
    readMessages=0
    readFolder=0
 
    'Outlook Postfächer "öffnen" und durchgehen:
    Set objStores=Outlook.Application.Session.Stores
    For Each objStore In objStores
        Set objOutlookFile=objStore.GetRootFolder
        'Debug.Print objOutlookFile.Name
        If objOutlookFile.Name="Teampostfach bewerbung@kk-software.de" Then
            For Each objFolder In objOutlookFile.Folders
                If objFolder.DefaultItemType=olMailItem Then
                    'Debug.Print objOutlookFile.Name & "=> " & objFolder.Name
                   Call ProcessFolders(objFolder)
                End If
            Next
        End If
    Next
    
    MsgBox "Fertig!" & vbCrLf & "Durchsuchte Ordner: " & readFolder & vbCrLf & "Nachrichten auf ungelesen gesetzt: " & readMessages & vbCrLf & "Dauer: " & Format(Timer - startzeit, "fixed") & " Sek.", , "MarkAllItemsAsUnread"
End Sub

Sub ProcessFolders(ByVal objCurFolder As Outlook.Folder)
    Dim objUnreadItems As Outlook.Items
    Dim i As Integer
    Dim objItem As Object
    Dim objSubFolder As Outlook.Folder
    Const excludefolders="|5 - ERLEDIGT|6-erledigt-abgesagt|Gesendete Elemente|Gelöschte Elemente|Archiv|Junk-E-Mail|Postausgang|RSS-Feeds|Working Set|Ausgehend|Eingehend|Feeds|Yammer-Stamm|Files|Teamchat|Verlauf der Unterhaltung|Dateien|Conversation Action Settings|Entwürfe|06 - Erledigt - abgesagt|07 - Erledigt - sonstige|Synchronisierungsfehler|"
 
    'Nur Ordner durcharbeiten, die nicht ausgeschlossen sind:
    If InStr(1, excludefolders, "|" & objCurFolder.Name & "|", vbTextCompare)=0 Then
       Set objUnreadItems=objCurFolder.Items.Restrict("[Unread]=False")
       'Debug.Print objCurFolder.Name & "=> " & objUnreadItems.Count
       readFolder=readFolder + 1
    
       'Alle gelesenen Nachrichten als ungelesen markieren:
       For i=objUnreadItems.Count To 1 Step -1
            readMessages=readMessages + 1
           Set objItem=objUnreadItems.Item(i)
           objItem.UnRead=True
           objItem.Save
       Next
       
       'Unterordner rekursiv durchgehenen
       'Achtung: Unterordner von oben ausgeschlossenen Ordnern werden nicht verarbeitet (wenn man das will, dann diesen Block aus dem oberen IF rausnehmen).
        If objCurFolder.Folders.Count > 0 Then
           For Each objSubFolder In objCurFolder.Folders
               Call ProcessFolders(objSubFolder)
           Next
        End If
    End If
 
    
End Sub

Ändern Sie folgende Zeilen:


If objOutlookFile.Name="Teampostfach bewerbung@kk-software.de" Then

Hier tragen Sie den Namen des Team-Postfachs ein, wie er in der linken Outlook-Leiste benannt ist.


Const excludefolders="|5 - ERLEDIGT|6-erledigt-abgesagt|Gesendete Elemente|Gelöschte Elemente|Archiv|Junk-E-Mail|Postausgang|RSS-Feeds|Working Set|Ausgehend|Eingehend|Feeds|Yammer-Stamm|Files|Teamchat|Verlauf der Unterhaltung|Dateien|Conversation Action Settings|Entwürfe|06 - Erledigt - abgesagt|07 - Erledigt - sonstige|Synchronisierungsfehler|"

Hier tragen Sie alle Ordner ein, die NICHT auf ungelesen gestellt werden sollen. Trennen Sie jeweils die Ordner mit einem senkrechten Strich | (sonst funktioniert es nicht).

 

Überprüfen Sie den Code durch Klicken auf “Debuggen” ⇒ “Kompilieren…”
 

Fügen Sie nun unter “Datei” ⇒ “Optionen” ⇒ “Menüband anpassen” rechts eine “Neue Registerkarte” hinzu. Benennen Sie diese entsprechend um und wählen Sie in der Mitte unter “Befehle auswählen” ⇒ “Makros” das neue Makro aus und fügen es mit “Hinzufügen” in die neue Registerkarte/Gruppe.

Outlook: Menüband anpassen, um neuen Button hinzuzufügen

Ggfs. müssen Sie Outlook noch einmal neu starten, damit das neue Menü oben erscheint bzw. Sie das neue Menüband umbenennen können. Auch kann man unter “Umbenennen” die Beschriftung umbenennen und ein anderes Symbol auswählen.

Jetzt haben Sie im Outlook eine neue Registerkarte und können die Funktion bequem aufrufen.
Outlook: neue Registerkarte

Outlook: Button, um alle E-Mails als ungelesen zu markieren

Um sicher zu sein, dass es funktioniert, wurde eine Meldung eingebaut.

Outlook-Meldung: nach ungelesenen E-Mails suchen

Sie können folgende Zeile auch löschen, wenn Sie die Meldung nicht benötigen:

MsgBox "OK klicken, um nach gelesenen Nachrichten zu suchen...", , "MarkAllItemsAsUnread"

 

Je nach Anzahl der Ordner kann es einen Moment dauern, bis das Skript ausgeführt ist. Erfahrungsgemäß liegt dies zwischen einer Sekunde und auf einem langsameren Notebook 45 Sekunden. Wenn das Skript fertig ist, erscheint ein entsprechender Hinweis.

Outlook-Meldung: Suchergebnis nach der Suche nach ungelesenen E-Mails

Jetzt können Sie immer mit einem Klick alle Nachrichten als ungelesen markieren und so noch effizienter arbeiten:
Gliederung eines Team-Postfachs ohne ungelesene E-MailsGliederung eines Team-Postfachs mit ungelesenen E-Mails

 

Autor: Arnulf Koch | https://www.kk-software.de/mitarbeiter/5/koch | https://blog.arnulf-koch.de/


Beitrag vom 10.06.2019

Kommentar abgeben:

var kk_slides = [ {src: 'resize_bilder-___-04_1920_1080_90.png', loop: false, mute: false }, {src: 'resize_bilder-___-05_1920_1080_90.png', loop: false, mute: false }, {src: 'resize_bilder-___-03_1920_1080_90.png', loop: false, mute: false }, {src: 'resize_bilder-___-03_1920_1080_90.png', loop: false, mute: false } ]; if(window.innerWidth<1200){ var kk_slides = [ {src: 'resize_bilder-___-02_1920_1080_90.png', loop: false, mute: false }, {src: 'resize_bilder-___-04_1920_1080_90.png', loop: false, mute: false }, {src: 'resize_bilder-___-02_1920_1080_90.png', loop: false, mute: false }, {src: 'resize_bilder-___-05_1920_1080_90.png', loop: false, mute: false } ]; }else if(typeof kk_slides[0].video !== 'undefined'){ kk_slides.splice(1,3); }/* $( document ).ready(function() { var timestamp=Math.floor(Date.now()/1000); if (timestamp<=1482101999) { if(timestamp>=1481929200) $('head').append(''); }*/ $('body').vegas({ cover: true, timer: false, transition: 'fade', transitionDuration: 1000, delay: 20000, valign: '0%', slides: kk_slides, overlay:'dateien/layout/bg-dummy.png', walk: function (index, slideSettings) { if(slideSettings.src == undefined){ $('.vegas-overlay').css('background-image', 'url(dateien/layout/bg-raster.png)'); }else{ $('.vegas-overlay').css('background-image', 'none'); } } }); });