techstrator
Goto Top

Mehrere E-Mails in Termine im Kalender umwandeln

Hallo

Ich suche folgende VBA-Makro-Möglichkeit:

  • Eine oder mehrere E-Mail/s manuell markieren und per Makro in einzelne Outlook-Termine umwandeln und diese dann in einen fest zugeordneten oder wählbaren Kalender ablegen.
  • Das Datum des E-Mail-Eingang (empfangen) sollte das (Start)datum des Termins (empfangen am) sein.
  • Die Zeit des E-Mail-Eingang sollte die Startzeit des Termins (empfangen um) sein.
  • Die Dauer des Termins sollte standardmässig 5 Min. betragen (Die Zeit könnte man dann im Termin noch manuell nach Bedarf anpassen) oder wählbar sein.

Ist so ein Script überhaupt machbar?
Sieht jemand eine andere Lösung?

Wie man mehrere Termin in Aufgaben konvertiert, habe ich z.B. da gefunden: Mehrere Termine in Aufgaben konvertieren

Für Hilfen bin ich dankbar.

Content-ID: 14102448872

Url: https://administrator.de/forum/mehrere-e-mails-in-termine-im-kalender-umwandeln-14102448872.html

Ausgedruckt am: 24.12.2024 um 19:12 Uhr

colinardo
Lösung colinardo 27.12.2023 aktualisiert um 11:47:48 Uhr
Goto Top
Servus @Techstrator !
Ist so ein Script überhaupt machbar?
Ja das ist problemlos möglich.

Hier ein Beispiel wie so etwas aussehen könnte (Kommentare s. Code):
Sub CreateAppointmentsFromSelectedMails()
    Dim itm As Object, folderDestination As folder
    With ActiveExplorer
        ' if there is at least 1 selected mail ...  
        If .Selection.Count > 0 Then
            ' ask user to select the destination folder  
            Set folderDestination = Application.Session.PickFolder
            ' if not folder was choosen exit sub  
            If folderDestination Is Nothing Then Exit Sub
            ' check folder type of type to be a calendar folder  
            While folderDestination.DefaultItemType <> olAppointmentItem
                MsgBox "Bitte einen Ordner vom Typ Kalender wählen!", vbExclamation  
                Set folderDestination = Application.Session.PickFolder
                If folderDestination Is Nothing Then Exit Sub
            Wend
            ' for each item in selection  
            For Each itm In .Selection
                ' only process items of type "e-mail"  
                If itm.Class = olMail Then
                    ' create new appointment with details of mailitem  
                    With Application.CreateItem(olAppointmentItem)
                        ' assign subject  
                        .subject = itm.subject
                        ' assign body  
                        .Body = itm.Body
                        ' set start time to received time of mail  
                        .Start = itm.ReceivedTime
                        ' set end time of appointment to recivedtime + 5 minutes  
                        .End = DateAdd("n", 5, itm.ReceivedTime)  
                        ' do not set a reminder  
                        .ReminderSet = False
                        ' save appointment item in destination folder  
                        .Move folderDestination
                    End With
                End If
            Next
        Else
            ' user selected no mails  
            MsgBox "Bitte mindestens eine E-Mail auswählen!", vbExclamation  
        End If
    End With
End Sub
Das solltest du auf deine weiteren Bedürfnisse zuschneiden können.

Grüße Uwe
Techstrator
Lösung Techstrator 27.12.2023 um 22:43:12 Uhr
Goto Top
#Uwe
Das ist echt der Hammer, funktioniert super!

Weckt jetzt bei mir noch die komplettierende Frage:
- Falls der E-Mail eine Kategorie "Muster" zugewiesen ist, könnte "Muster" am Anfgang des Termin-Betreffs stehen?
- Könnte zwischen dem Kategorie-Text (Muster) und dem (Betreff-Text) noch der Text eingefügt werden (E-Mail von/an) gefolgt von den Adressen (von/an)?

Beispiel:
E-Mail-Absender 1 schreibt an E-Mail-Empfänger 2 eine E-Mail mit dem Text im Betreff "Kennst du die IT-Community Administrator?".

Die Betreff-Zeile des Termins müsste dann lauten:
"Muster": E-Mail von/an "1"/"2": "Kennst du die IT-Community Administrator?"

Fall möglich, wäre echt cool.
colinardo
Lösung colinardo 27.12.2023 aktualisiert um 23:18:09 Uhr
Goto Top
Bin zwar nicht mehr am Rechner aber solltest du mit der Änderung dieser Zeile erreichen
.subject = itm.Categories & " : E-Mail von/an " & itm.SenderEmailAddress & "/" & itm.Recipients(1).Address & " : " & itm.subject  
Empfänger kann es ja mehrere geben, im Beispiel wird jetzt einfach nur die erste aus der Collection in den Betreff geschrieben.

Verfügbare Eigenschaften des MailItem-Objekts kannst du hier nachschlagen : MailItem-Objekt (Outlook)

Grüße Uwe
Techstrator
Techstrator 30.12.2023 um 06:02:13 Uhr
Goto Top
#Uwe

Habe auch dies umgesetzt. Klappt!

Dabei bin ich noch auf den Umstand gestossen, dass Kategorien nach der ErkennungsID manchmal noch einen Gedankenstrich und Text haben. Ich benötige aber nur die ErkennungsID. Diese ist immer 9 Zeichen lang.

Mit "Const MAXSUBJECTCHARS = 9" und "If Len(strNewSubject) > MAXSUBJECTCHARS Then ... strNewSubject = Left(strNewSubject, MAXSUBJECTCHARS) & "..."" könnte man den Betreff einkürzen, dann ist aber alles, was auf die Categories folgt, auch weg.

Frage: Wie kann ich den Code schreiben, dass der im Subject eingefügte Passus "itm.Categories" jeweils nur 9 Zeichen lang ist?

Danke für Hilfen.
colinardo
Lösung colinardo 30.12.2023 aktualisiert um 10:21:22 Uhr
Goto Top
Frage: Wie kann ich den Code schreiben, dass der im Subject eingefügte Passus "itm.Categories" jeweils nur 9 Zeichen lang ist?
Wenn es immer nur eine Kategorie ist dann
.subject = Left(itm.Categories,9) & " : E-Mail von/an " & itm.SenderEmailAddress & "/" & itm.Recipients(1).Address & " : " & itm.subject    

Wenn mehrere angegeben wurden
Dim cat as String, c as String
If InStr(1,itm.Categories,";",1) > 0 then  
    For each c in Split(itm.Categories,";",-1,1)  
         cat = cat & Left(c,9) & "|"  
    Next
else
    cat = Left(itm.Categories,9) 
End if
.subject = cat & " : E-Mail von/an " & itm.SenderEmailAddress & "/" & itm.Recipients(1).Address & " : " & itm.subject    
Techstrator
Techstrator 16.01.2024 um 22:23:47 Uhr
Goto Top
#Uwe

Sorry, dass ich verspätet antworte, musste kurzfristig beruflich weg.

Das hat alles bestens geklappt. Alle Vorschläge haben mir sehr geholfen. Vielen Dank!