VBA-Skript zum dynamischen Ändern der Betreffzeile für eingehende E-Mails in Outlook 2013

2

Ich habe mir dieses Outlook-Skriptbeispiel angeschaut, das für mich ähnlich und ein guter Anfang ist: Outlook-Skript zum Bearbeiten des Betreffs

Ich muss jedoch die Betreffzeilen für eingehende Nachrichten bei der Ankunft in einer schwierigeren Methode ändern, die eine komplexere Manipulation von Zeichenfolgen erfordert.

Dies ist eigentlich mein Basiscode, den ich verwendet habe und der auf dem neuesten Stand war:

Sub ConvertToPlain(MyMail As MailItem)
    Dim strID As String
    Dim objMail As Outlook.MailItem

    strID = MyMail.EntryID
    Set objMail = Application.Session.GetItemFromID(strID)
    objMail.Subject = Left(objMail.Subject, 18)
    objMail.Save

    Set objMail = Nothing
End Sub

Jetzt habe ich die ursprünglichen Themen immer im folgenden Format (alles in Klammern ist eine Variable):

Ticket [#] - [SOMETHING] - [SOMETHING] - [TITLE]

Ich möchte das "[ETWAS] - [ETWAS] -" entfernen, das sich dynamisch ändert, wie Sie sehen können, und nur Folgendes behalten:

Ticket [#] - [TITLE]

Auf diese Weise kann ich mit Leichtigkeit wieder in Outlook sortieren / filtern. Wie kann dies in VBA erreicht werden? Vielen Dank.

Shackrock
quelle

Antworten:

3

Am besten ist es, wenn Sie entweder die gewünschten Teile auslesen oder wenn Sie wissen, dass das Format IMMER in diesem Format ist, können Sie die Zeichenfolge aufteilen und die erste und die letzte übernehmen.

In Anlehnung an:

Sub ConvertToPlain(MyMail As MailItem)
    Dim strID As String
    Dim objMail As Outlook.MailItem
    Dim splitSubject() as String
    Dim concatSubject as String

    strID = MyMail.EntryID
    Set objMail = Application.Session.GetItemFromID(strID)
    splitSubject = Split(objMail.Subject, "-")
    concatSubject = splitSubject(LBound(splitSubject)) & " - " & splitSubject(UBound(splitSubject))
    objMail.Subject = concatSubject
    objMail.Save

    Set objMail = Nothing
End Sub

Dieser Code ist völlig ungetestet, bringt Sie aber hoffentlich etwas auf die Strecke.

Jonno
quelle
Habe ein paar Testfälle gemacht und soweit so gut! Die Split-Funktion ist hier wunderbar! Der LBound nimmt also den ersten "vor dem Bindestrich" und der UBound den letzten "nach dem Bindestrich" auf? Wie würde ich in Zukunft auf die mittleren Abschnitte zwischen den Strichen zugreifen, wenn dies gewünscht wird? Vielen Dank!
Shackrock
LBound und UBound geben den ersten und den letzten Index des Arrays zurück. Um auf andere Teile zuzugreifen, verwenden Sie splitSubject (0) splitSubject (1) splitSubject (2) usw.
Jonno