Der beste Outlook-Tipp inkl. Makro für PR-Mail-geplagte Journis

Das geniale Makro – in Outlook hinzufügen

Wenn die Vorbereitungen auf der vorherigen Seite getroffen sind, haben Sie also jetzt eine Regel namens PR01, die Mails von einer bestimmten Absender-Domain automatisch in den Ordner namens PR verschiebt. Richtig?
Jetzt drücken Sie Alt+F11 und gehen Sie zu Einfügen/Modul. Klicken Sie doppelt aufs links erscheinende Modul1. Fügen Sie den kompletten untenstehenden Makrocode ein.
Wichtig: Falls Ihre Regel nicht PR01 heisst oder der Ordner, in den Sie die Mails verschoben haben wollen, nicht PR heisst, ändern Sie die Bezeichnungen in den zwei Zeilen, die ich auf dem nachfolgenden Screenshot markiert habe.
Sollten Regel und Ordner bei Ihnen anders als bei mir heissen, müssen Sie diese zwei Zeilen im Makrocode noch anpassen.
Quelle: PCtipp.ch
Klicken Sie auf Speichern, gefolgt von Datei/Schliessen und zurück zu Outlook. Erstellen Sie rasch ein Zertifikat, wie in «Outlook: So signieren Sie Ihre Makros» beschrieben.
Öffnen Sie wieder mit Alt+F11 den VBA-Editor und klicken Sie aufs Modul1. Via Extras/Digitale Signatur wählen Sie das vorhin erstellte Zertifikat aus, klicken Sie auf OK und erneut auf OK.
Jetzt gehts erneut zu Datei/Schliessen und zurück zu Outlook. Beenden Sie Outlook via Datei-Menü und klicken Sie bei der Frage, ob das Projekt gespeichert werden soll, auf Ja.
Einstellung prüfen: Starten Sie Outlook wieder und öffnen Sie Datei/Optionen/Trust Center. Bei Einstellungen für das Trust Center gehts zu den Makroeinstellungen. Stellen Sie sicher, dass diese Option aktiviert ist: «Benachrichtigungen für digital signierte Makros. Alle anderen Makros sind deaktiviert».
Diese Einstellung erlaubt das Ausführen signierter Makros
Quelle: PCtipp.ch
Makroverknüpfung platzieren: Am besten blenden Sie die Leiste für den Schnellzugriff ein und platzieren Sie diese oben links. Wie das geht, steht hier: «Outlook, Word, Excel: Wohin ist die Schnellzugriffsleiste verschwunden?».
Ist die Schnellzugriffsleiste platziert, klappen Sie an deren rechtem Rand das Winkelsymbol auf und gehen Sie zu Weitere Befehle. Schalten Sie oben bei «Befehle auswählen» auf Makros um. Klicken Sie aufs Makro «Projekt1.verschieben» und befördern Sie es mittels Hinzufügen in die rechte Spalte.
Sieht noch nicht hübsch aus, aber das ändern wir gleich
Quelle: PCtipp.ch
Sie möchten vermutlich nicht auf «Projekt1.verschieben» klicken müssen, sondern auf etwas wie «PR-Filter». Klicken Sie in der rechten Spalte auf Projekt1.verschieben und benutzen Sie unten Ändern. Überschreiben Sie den Namen mit der gewünschten Bezeichnung. Wenn Sie mögen, wählen Sie auch gleich ein anderes, gut erkennbares Icon dafür aus. Klicken Sie in beiden Fenstern auf OK. Fertig!
Benennen Sie die Verknüpfung für Ihre Schnellzugriffsleiste um und wählen Sie allenfalls ein passendes Symbol
Quelle: PCtipp.ch
Makro ausführen: Wenn nun eine Mail einer neuen PR-Agentur eintrifft, klicken Sie die Mail an. Anschliessend tuts ein Klick auf Ihr PR-Filter-Icon. Die Domain wird zu Ihrer PR01-Regel hinzugefügt, worauf Outlook diese Mail und alle künftigen Mails, die dieselbe Domain tragen, in den PR-Ordner verschiebt. (PCtipp-Forum)
Option Explicit
Option Base 1

' Dieser Makro erweitert eine Regel zum Verschieben von Mails.
' Der Domänen-Name von markierten Mails wird in die
' Regel-Liste zum Verschieben aufgenommen.
' Die erweiterte Regel wird 1x per Makro ausgeführt

' Es gibt zwei Bedingungen:
' - Der Name des Ordners, in den verschoben werden soll,
'   darf in der Ordnerstruktur nur 1x vorhanden sein.
' - Die Regel, die in der Konstanten 'regelName' genannt ist,
'   muss mindestens 1 Bedingung enthalten,
'   dass Mails mit bestimmtem Text in der Absender-Adresse
'   in den angegebenen Ordner verschoben werden sollen.

Sub verschieben()
    ' Diese zwei Konstanten nach Wunsch anpassen:
    Const nachOrdner As String = "PR"   ' Der Ordner, in den die Mails verschoben werden
    Const regelName As String = "PR01"  ' Der Name der Regel, die erweitert wird.
    
    Dim zielOrdner As Outlook.Folder    ' Der Zielordner als Objekt
    Dim regeln As Outlook.Rules         ' Alle Regeln als Objekt
    Dim absender As Variant             ' Die Liste der Absender in der Regel
    Dim explorer As Outlook.explorer    ' Der Outlook-Explorer als Objekt
    Dim email As Object                 ' Die ausgewählte(n) E-Mail(s) als Objekt
    Dim domäne As String                ' Domäne einer Mail-Adresse
    Dim domänenListe As String          ' Liste aller Domänen in der Regel-Liste als ein String
    Dim i As Integer                    ' Schleifen-Laufvariable
    Dim ordner As Outlook.Folder        ' Ein Outlook-Ordner als Objekt
    
    Set explorer = Application.ActiveExplorer       ' Den Outlook-Explorer holen
    Set ordner = explorer.CurrentFolder             ' Den aktiven Outlook-Ordner holen
    If explorer.Selection.Count < 1 Then Exit Sub   ' Wenn keine Mail ausgewählt ist, den Makro beenden
 
    Set zielOrdner = ziel(nachOrdner)       ' Den Ziel-Ordner als Objekt über die Funktion 'ziel' finden
    If zielOrdner Is Nothing Then                               ' Wenn es den Ziel-Ordner nicht gibt...
        MsgBox "Zielordner nicht gefunden", , "Tut mir Leid"    ' ...Meldung ausgeben...
        Exit Sub                                                ' ...und Makro beenden
    End If
    
    Set regeln = Application.Session.DefaultStore.GetRules()    ' Die Regeln als Objekt holen
    With regeln(regelName)                                      ' Aus den Regeln die ausgewählte Regel als Objekt holen
        With .Conditions.SenderAddress                          ' Aus der ausgewählten Regel die Bedingung für Absender-Adressen als Objekt holen
            absender = .Address                                 ' Die Adressenliste in ein Variablenfeld holen
            domänenListe = ""                                   ' Die Domänenliste als leer initialisieren
            For i = 0 To UBound(absender)                       ' Alle Domänen in der Liste durchgehen
                domänenListe = domänenListe & absender(i) & "," ' Die Domänen zu einem einzigen Text zusammenbauen
            Next i
            
            For Each email In explorer.Selection                ' Alle ausgewählten Mails durchgehen
                With email
                    domäne = Mid(.SenderEmailAddress, InStr(.SenderEmailAddress, "@"))  ' Die Domäne der Mail extrahieren
                    If InStr(domänenListe, domäne & ",") = 0 Then                       ' Wenn die Domäne noch nicht in der Liste ist...
                        ReDim Preserve absender(0 To UBound(absender) + 1)              ' ...das Datenfeld der Domänen erweitern...
                        absender(UBound(absender)) = domäne                             ' ...und die neue Domäne hinzufügen.
                        domänenListe = domänenListe & domäne & ","                      ' Die neue Domäne in die Domänenliste mit aufnehmen
                    End If
                End With
            Next email
            
            .Address = absender         ' Das erweiterte Datenfeld mit den Domänen in die Adressenliste der Regel schreiben
        End With
        regeln.Save                     ' Alle Regeln sichern
        ' Die Regel einmalig ausführen.
        ' 1. False:                                     Keine Fortschrittsanzeige
        ' ordner:                                       Die Regel im aktuellen Ordner ausführen
        ' 2. False:                                     Unterordner nicht mit berücksichtigen
        ' OlRuleExecuteOption.olRuleExecuteAllMessages  Regel für alle Mails im Ordner anwenden, egal ob gelesen oder ungelesen
        .Execute False, ordner, False, OlRuleExecuteOption.olRuleExecuteAllMessages
    End With
End Sub

' Die Funktion ermittelt den Hauptordner des eigenen Mail-Accounts.
' Diesen Hauptordner und den Namen des gesuchten Ziel-Ordners
' übergibt sie an die Funktion 'finde'
' Deren Ergebnis wird zurückgegeben
Function ziel(ordner As String) As Outlook.Folder
    Dim start As Outlook.Folder
    
    Set start = Application.Session.DefaultStore.GetRootFolder   ' Der Hauptordner des eigenen Mail-Accounts als Objekt
    Set ziel = finde(start, ordner)     ' Aufruf der Funktion 'ziel' mit Übergabe des Hauptordnders und des Zielordners
End Function

' Die Funktion sucht den Zielordner in der Struktur des Hauptordners
' und gibt diesen als Objekt zurück
' Wird er nicht gefunden, kommt 'Nothing' zurück
Function finde(of As Outlook.Folder, ordner As String) As Outlook.Folder
    Dim osf As Outlook.Folder   ' Outlook Unterordner als Objekt
    
    Set finde = Nothing             ' Das Ergebnis initialisieren
    For Each osf In of.Folders      ' Alle Unterordner des Hauptordners bearbeiten
        If osf.Name = ordner Then   ' Wenn der Zielordner gefunden wurde...
            Set finde = osf         ' ...den Zielordner als Rückgabewert setzen...
            Exit Function           ' ...und die Funktion beenden
        End If
        Set finde = finde(osf, ordner)  ' Sonst die Funktion rekursiv aufrufen, mit dem Unterordner als Startpunkt.
        If Not finde Is Nothing Then                    ' Wenn etwas gefunden wurde...
            If finde.Name = ordner Then Exit Function   '...und der Fund ist der Zielordner, Funktion beenden
        End If
    Next osf
End Function



Kommentare
Es sind keine Kommentare vorhanden.