Макрос для сохранения писем из Outlook - с инициалами отправителя - PullRequest
0 голосов
/ 23 октября 2019

Я пытаюсь заставить работать макрос Outlook, который просто сохраняет электронные письма в виде файлов MSG с определенным форматированием для архивирования. По аналогии с другим пользователем здесь, я использую следующий фрагмент кода, что приводит к формату файла "yyyy-mm-dd - sender - title.msg", который является именно тем, что я хочу, за исключением того, что мне нужно получить отправителяТолько инициалы, а не полное имя. Любая помощь с благодарностью! Спасибо.

Sub OpenAndSave()
    Const SAVE_TO_FOLDER = "C:\Users\Documents\Emails\"
    Dim olkMsg As Outlook.MailItem, intCount As Integer
    intCount = 1
    For Each olkMsg In Outlook.ActiveExplorer.Selection
        strDate = Format(olkMsg.ReceivedTime, "yyyy-mm-dd - ")
        olkMsg.Display
        olkMsg.SaveAs SAVE_TO_FOLDER & strDate & RemoveIllegalCharacters(olkMsg.senderName) & " - " & RemoveIllegalCharacters(olkMsg.Subject) & ".msg"
        olkMsg.Close olDiscard
    Next
    Set olkMsg = Nothing
End Sub

Function RemoveIllegalCharacters(strValue As String) As String
    ' Purpose: Remove characters that cannot be in a filename from a string.'
    RemoveIllegalCharacters = strValue
    RemoveIllegalCharacters = Replace(RemoveIllegalCharacters, "<", "")
    RemoveIllegalCharacters = Replace(RemoveIllegalCharacters, ">", "")
    RemoveIllegalCharacters = Replace(RemoveIllegalCharacters, ":", "")
    RemoveIllegalCharacters = Replace(RemoveIllegalCharacters, Chr(34), "'")
    RemoveIllegalCharacters = Replace(RemoveIllegalCharacters, "/", "")
    RemoveIllegalCharacters = Replace(RemoveIllegalCharacters, "\", "")
    RemoveIllegalCharacters = Replace(RemoveIllegalCharacters, "|", "")
    RemoveIllegalCharacters = Replace(RemoveIllegalCharacters, "?", "")
    RemoveIllegalCharacters = Replace(RemoveIllegalCharacters, "*", "")
End Function

1 Ответ

0 голосов
/ 23 октября 2019

Вы можете использовать вспомогательную функцию, подобную этой, возможно, чтобы вернуть инициалы из имени отправителя:

Private Function Initials(ByVal fullName As String) As String
    Dim splitName
    splitName = Split(fullName)

    Dim i As Long
    For i = LBound(splitName) To UBound(splitName)
        Initials = UCase$(Initials & IIf(Len(splitName(i) > 0), Left$(splitName(i), 1), ""))
    Next
End Function

Назовите это, возможно, так:

olkMsg.SaveAs SAVE_TO_FOLDER & strDate & RemoveIllegalCharacters(Initials(olkMsg.senderName))...

хотя я бы нарушил этодля удобства чтения.

РЕДАКТИРОВАТЬ:

Возможно, вы можете упростить строку Initials = ... до:

Initials = UCase$(Initials & Left$(splitName(i), 1))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...