spinnifex
Goto Top

Outlook 2019 VBA Terminfarbe ändern

Moin allerseits,

bisher konnte ich per Makro die Farben für bestimmte Termine (Stichwort im Betreff, bestimmter Monat) ändern. Nach der Umstellung von POP auf IMAP, ist diese Option aber aus meinem Kalnder verschwunden. Noch nicht mal manuell kann man noch Farben setzen. Jetzt also mein Versuch über die Kategorienfarbe. Die Property Categories.Color habe ich gefunden. Allerdings schaffe ich es nicht, das entsprechende Objekt zu definieren.

Dim oCal As Outlook.Folder
Dim oItems As Outlook.Items
Dim oAppt As Outlook.AppointmentItem
Dim oCat As Outlook.Category

Set oCal = Application.Session.GetDefaultFolder(olFolderCalendar)
Set oItems = oCal.Items
Set oCat = oCal.????

Weiß jemand Rat, durch was ich die ???? eretzen muss, damit
????.Color = olCategoryColorDarkorange
funktioniert?

Lieben Dank und schönen Abend!

Spinnifex

Content-ID: 1822942664

Url: https://administrator.de/contentid/1822942664

Ausgedruckt am: 22.11.2024 um 06:11 Uhr

colinardo
Lösung colinardo 03.02.2022 aktualisiert um 17:19:36 Uhr
Goto Top
Servus.
den einzelnen Terminen werden keine Farben zugewiesen sondern Kategorie-Namen und dass macht man in der Categories Property des Appointment Objekts
https://docs.microsoft.com/de-de/office/vba/api/outlook.appointmentitem. ...
Diese kann einen oder mehrere Kategorienamen mit Komma voneinander getrennt enthalten.

Beispiel (Filter nach Subject & Co kannst du ja wieder selbst hinzufügen)
Sub AssignCategories()
    Dim app As Object
    For Each app In Application.Session.GetDefaultFolder(olFolderCalendar).items
        SetCategory app, "Wichtig"  
    Next
End Sub

' Prozedur um die Kategorien eines Termins zu ändern  
Sub SetCategory(itm As Object, cat As String)
    If TypeOf itm Is AppointmentItem Then
        If itm.IsRecurring Then
            If itm.RecurrenceState <> olApptMaster Then
                Set itm = itm.Parent
            End If
        End If
    End If
    itm.Categories = cat
    itm.Save
End Sub

Die Farben für die Kategorien-Namen legt man vorher schon fest, entweder manuell über den entsprechenden Dialog, oder per Code
Application.Session.Categories.Item("Wichtig").Color = olCategoryColorBlue  

Grüße Uwe
spinnifex
spinnifex 03.02.2022 aktualisiert um 20:12:52 Uhr
Goto Top
Servus Uwe,

erstmal herzlichen Dank für Deine Antwort!! (Sorry für meine späte, musste ein bisschen kochen und vernaschen face-wink)

Inzwischen habe ich mein Skript soweit angepasst, dass es die Kategorie aus eine Combobox übernimmt und korrekt im Kalendereintrag hinterlegt. Auch ein Eintrag am Vortag "Vorbereitung TK" wird korrekt erstellt und bei Bedarf wieder entfernt.

Als Kategorie habe ich für die vorhandenen Einträge Gebucht gesetzt und habe als Farbe die OL-Vorgabe belassen. Die Kategorie erscheint auch korrekt im Kalendereintrag.

Nur sieht man die Färbung nirgends. Egal ob ich manuell oder per VBA Frei, Gebuchtoder Außer Haus auswähle, die Einträge bleiben Standard-Blassblau. Muss ich an den Ansichten noch etwas ändern?

Grüße Spinnifex

[edit] btw: Wo muss denn die Zeile
Application.Session.Categories.Item("Gebucht").Color = olCategoryColorBlue  
eigentlich hin? All meine Versuche in Application_Startup oder in Verbindung mit einer strCol = sind bisher gescheitert: ObjektVariable olCategoryColor... nicht definiert
colinardo
colinardo 03.02.2022 um 22:03:32 Uhr
Goto Top
Zitat von @spinnifex:
Nur sieht man die Färbung nirgends. Egal ob ich manuell oder per VBA Frei, Gebuchtoder Außer Haus auswähle, die Einträge bleiben Standard-Blassblau. Muss ich an den Ansichten noch etwas ändern?
Kommt auf die Ansicht drauf an, wenn Monatsansicht sollten sich die Einträge entsprechend Farben, wenn Listenansicht dann muss natürlich die entsprechende Spalte eingeblendet werden.

Grüße Spinnifex

[edit] btw: Wo muss denn die Zeile
Application.Session.Categories.Item("Gebucht").Color = olCategoryColorBlue  
eigentlich hin? All meine Versuche in Application_Startup oder in Verbindung mit einer strCol = sind bisher gescheitert: ObjektVariable olCategoryColor... nicht definiert
Die Zeile muss man nur einmalig anwenden denn die Einstellung ist permanent, kannst du im Direktbereich des VBA Editors einmalig ausführen oder temp. ne kleine Sub erstellen mit du den Code-Schnippsel einmalig ausführst.
spinnifex
spinnifex 04.02.2022 aktualisiert um 10:02:58 Uhr
Goto Top
Moin Uwe,

irgendwie mag mein Outlook nicht so wie Du willst / ich will face-sad

in der Monatsansicht (tatsächlich meiner bevorzugten), aber auch der Tages, Arbeits-, Woche färbt sich genau gar nix und

das Direktfester kläfft mich mit "Laufzeitfehler 91 Objektvariable oder With-Blockvariable nicht festgelegt" an.

Alles so wenig bunt hier ....

Kannst Du zufällig erklären, warum das in der .PST so problemlos lief und in .OST jetzt so'n Ärger macht? Irgendwie habe ich das Gefühl seit IMAP vor einem ziemlich zusammengestutzen Outlook zu sitzen.

Dankbare Grüße!

Spinnifex
colinardo
colinardo 04.02.2022 aktualisiert um 10:30:03 Uhr
Goto Top
Welche Office/Outlook Version?

das Direktfester kläfft mich mit "Laufzeitfehler 91 Objektvariable oder With-Blockvariable nicht festgelegt" an.
Klappt hier bei einem kurzen Cross-Test von Outlook 2010 bis 2021 einwandfrei. Du gibst wohl den faschen Kategorienamen an.

Hier mal als Beipspiel einem markierten Termin die Kategorie mit dem Namen "Gelbe Kategorie" zugewiesen, er erscheint dann wie gewünscht mit der zugewiesenen Farbe.

screenshot

und mit dem kurzen Test-Schnippsel die Kategorie geändert (natürlich musst du für Serientermine obige Code-Variante nehmen da sich bei Serienterminen nur der Haupttermin ändern lässt)
Sub Test()
    Dim app As AppointmentItem
    For Each app In ActiveExplorer.Selection
        app.Categories = "Gelbe Kategorie"  
        app.Save
    Next
End Sub

screenshot

Works as designed wie man so schön sagt face-wink

Kannst Du zufällig erklären, warum das in der .PST so problemlos lief und in .OST jetzt so'n Ärger macht? Irgendwie habe ich das Gefühl seit IMAP vor einem ziemlich zusammengestutzen Outlook zu sitzen.
Das hat mit OST nichts zu tun. Bei IMAP liegen Kalender weiterhin im lokalen Store des Outlook und nicht auf dem IMAP-Server. Bei IMAP liegen rein Mails auf dem IMAP-Server, weder Kalender noch Kontakte, diese liegen weiterhin nur im lokalen Store.

Denke du hast da nur ein Verständnisproblem was IMAP und Outlook betrifft.
spinnifex
spinnifex 04.02.2022 um 10:57:29 Uhr
Goto Top
Okay,

"falscher Kategorienamen" Dann ist Copy and Paste schuld ... Ich habe Deine Zeile 1:1 übernommen.


".. ein Verständnisproblem was IMAP und Outlook betrifft." Das stimmt mich jetzt ein wenig traurig. Ich denke ich habe das Prinzip durchaus verstanden (so schwer ist es ja nun auch nicht). Allerdings sehe ich die Wirkungen in meinem Outlook.

Es geht mir übrigens nicht nur um Serientermine, ich möchte jede Art Termin kennzeichnen.

Grüße
colinardo
colinardo 04.02.2022 aktualisiert um 11:03:04 Uhr
Goto Top
Zitat von @spinnifex:
"falscher Kategorienamen" Dann ist Copy and Paste schuld ... Ich habe Deine Zeile 1:1 übernommen.
Näääääääää 🙈
Es geht mir übrigens nicht nur um Serientermine, ich möchte jede Art Termin kennzeichnen.
Kein Problem die obige SetCategories Methode kann das.
spinnifex
spinnifex 04.02.2022 um 11:29:54 Uhr
Goto Top
"Welche Version?" Siehe Titel ...

Immerhin - Dein Snippet "Gelbe Kategorie" funktioniert nd auch wenn ich nicht erst Termine selektieren will, hilft es vermutlich zur Lösung.

Danke dafür!

Spinnifex
colinardo
colinardo 04.02.2022 aktualisiert um 11:37:16 Uhr
Goto Top
Zitat von @spinnifex:

"Welche Version?" Siehe Titel ...
Uupss sorry.
Immerhin - Dein Snippet "Gelbe Kategorie" funktioniert nd auch wenn ich nicht erst Termine selektieren will, hilft es vermutlich zur Lösung.

Du kannst die Kategorien im Dialog auch benennen wie du willst oder auch neue hinzufügen.

screenshot

Im Skript musst du dann selbstredend den neuen Namen bei der Zuweisung zu Terminen oder Ändern der Farbe verwenden.
spinnifex
Lösung spinnifex 04.02.2022, aktualisiert am 05.02.2022 um 09:20:36 Uhr
Goto Top
Moin allerseits!

Nur noch als Erläuterung meines Satzes " ziemlich zusammengestutzen Outlook". Seit der Umstellung auf IMAP sind in allen Elementen (Mail, Kalender, usw.) die Optionen für die Kategorien nicht mehr verfügbar.

Erst wenn man einen Eintrag per VBA kategorisiert, kann man in diesem dann durch Rechtsklick auf die Kategorie in einem Termin oder einer Mail wieder auf den oben gezeigten Dialog zugreifen. Das zumindest meine Lösung (bestimmt nicht die einzige.)

Dass das nicht nur meine Wahrnehmung ist, zeigen entsprechende Beiträge im Internet, in denen der Verlust der Kategorien beklagt wird.

Beispiele OL2016 oder später oder gegen E-Mail-Adressen-Preisgabe

Grüße und gute Nacht!

Spinnifex
colinardo
colinardo 04.02.2022 aktualisiert um 23:18:25 Uhr
Goto Top
Zum Glück hat man ja die freie Wahl 🙂.

Bitte dann auch den Thread schließen nicht vergessen.

Gut's Nächtle.
spinnifex
Lösung spinnifex 05.02.2022 um 11:14:05 Uhr
Goto Top
Moin,

und so geht's tatsächlich auch noch ohne VBA: Auch wenn Mails und Kalendereinträge keine Kategorien mehr zu kennen scheinen, in den Aufgaben gibt es sie noch. Dort lässt sich auch noch der Dialog öffnen um die Kategorien anzupassen. Muss man aber nicht erklären, ist schließlich erklärend beschriftet.

Mit einem Shortkey hat man seine Kategorien dann auch in Post und Terminen wieder zur Verfügung.

Schöne Grüße

Spinnifex
colinardo
colinardo 05.02.2022 aktualisiert um 12:12:49 Uhr
Goto Top
Zitat von @spinnifex:

Moin,

und so geht's tatsächlich auch noch ohne VBA: Auch wenn Mails und Kalendereinträge keine Kategorien mehr zu kennen scheinen, in den Aufgaben gibt es sie noch. Dort lässt sich auch noch der Dialog öffnen um die Kategorien anzupassen. Muss man aber nicht erklären, ist schließlich erklärend beschriftet.

Mit einem Shortkey hat man seine Kategorien dann auch in Post und Terminen wieder zur Verfügung.

Na wenn es weiter nichts ist und du nur den Dialog für die Zuweisung bekommen willst das kannst du dir auch mit einem eigenen Button in der Menüleiste der Mail-Inspector-Fenster hinzufügen. Der Thread war je eigentlich hauptsächlich auf VBA bezogen.
Sub OpenCategoriesDialog()
    If Not ActiveInspector Is Nothing Then
        With ActiveInspector
            If Not .CurrentItem Is Nothing Then
                .CurrentItem.ShowCategoriesDialog
            End If
        End With
    Else
        With ActiveExplorer.Selection
            If .Count > 0 Then
                .Item(1).ShowCategoriesDialog
            End If
        End With
    End If
End Sub

screenshot

screenshot

screenshot