Электронное письмо может иметь несколько тел или ни одного.Outlook распознает текст, HTML и RTF тела.Ни одно электронное письмо, которое я изучал в последние годы, не содержало тела RTF.Когда-то это был единственный вариант, если вы хотите отформатировать ваше сообщение.Сегодня HTML и CSS предлагают гораздо больше функциональности, чем RTF, и я сомневаюсь, что какой-либо смартфон поддерживает RTF.Я удивлен, что вы получаете письмо с телом RTF;Полагаю, это из устаревшей системы.
Игнорирование RTF, если электронное письмо имеет текст Html, это то, что отображается пользователю.Только если нет HTML-тела, пользователь увидит текстовое тело.
Из рассмотренных мною электронных писем все имеют текст и текст HTML.Почти все эти текстовые тела являются телом Html, каждый тег заменяется на возврат каретки и перевод строки.Поскольку CRLF как символ новой строки является соглашением Windows, я подозреваю, что если в письме нет текстового тела, Outlook создает его из тела Html для макросов, которые хотят обрабатывать текстовое тело.Если моя теория верна, Outlook не делает то же самое для электронной почты, которая содержит только электронную почту RTF.Следовательно, у вас есть текстовое тело, если есть тело HTML, но нет, если есть тело RTF.
Спецификация для RTF Microsoft доступна онлайн, так что вы можете изучить формат, если хотите.Если вы ищете «Могу ли я обработать RTF из VBA?», Вы найдете множество предложений, которые могут вас заинтересовать.
В качестве альтернативы показанный вами пример RTF выглядит просто:
{string of RTF commands{string of RTF commands}}
{string of RTF commands ending in “1033 ”text\par
text\par
text\par
}
Если вы удалили все до «1033», а конечный «}» затем заменили «\ par» на «», вы можете получить то, что хотите.
У меня проблемы с вашим VBA.Например:
Не все элементы в папке «Входящие» являются MailItems.Вы должны иметь:
For Each OutlookMail In Folder.Items
If OutlookMail.Class = olMail Then
If OutlookMail.ReceivedTime ... Then
: : :
End If
End If
Вам не нужно форматировать ячейки по отдельности.Следующее в нижней части будет обрабатывать AutoFit и вертикальное выравнивание:
Cells.Columns.Autofit
Cells.VerticalAlignment = xlTop
Ваш код работает на активном листе.Это зависит от того, активен ли правильный лист при запуске макроса.Вы должны назвать целевой лист, чтобы избежать ошибок.