Преобразование значения элемента управления содержимым в строку с помощью VBA

Я разрабатываю скрипт для форматирования шаблона Outlook и отправки его нажатием кнопки. Основная цель состоит в том, чтобы использовать одинарный межстрочный интервал и 0pt для интервалов после/перед, а также преобразовать все элементы управления содержимым (например, поля со списком) в моем шаблоне в текст/строку.

Sub FormatAndSend()
    Dim CurrentMessage As Outlook.MailItem

    If TypeName(Application.ActiveWindow) = "Inspector" Then
        Set CurrentMessage = Application.ActiveWindow.CurrentItem

        If CurrentMessage.To = "" Then
            If CurrentMessage.CC = "" Then
                If CurrentMessage.BCC = "" Then Exit Sub
            End If
        End If

        CurrentMessage.HTMLBody = Replace(CurrentMessage.HTMLBody, vbCr, vbCrLf)
        'Workaround to Remove Line Spacing (not working)
        '&
        'Convert Content Control selected values to String ...

        CurrentMessage.Send

        Set CurrentMessage = Nothing
    End If
End Sub

Есть ли более простой способ отформатировать существующий шаблон? Я уже пробовал несколько вещей, таких как замена символов ASCII, элементы HTML, ключевые слова,...

Кроме того, возможно ли преобразовать выбранные значения Content Control в обычный текст?


person mafap    schedule 10.10.2017    source источник
comment
Итак, как вы планируете преобразовать поле со списком в текст? Что именно вы подразумеваете под этим, и какой код вы написали, который делает это, и конкретно, где и как он не работает должным образом?   -  person Mathieu Guindon    schedule 10.10.2017
comment
Я имею в виду, преобразовать выбранное значение в поле со списком, поэтому, когда кто-то пересылает/отвечает на сообщение, его содержимое не может быть изменено   -  person mafap    schedule 10.10.2017
comment
Я не знаком с объектной моделью Outlook, но беглый взгляд на класс MailItem показывает, что не существует никакой коллекции Controls, поэтому разбор HtmlBody кажется лучшим вариантом.   -  person Mathieu Guindon    schedule 10.10.2017


Ответы (1)


Мне удалось решить мою проблему, используя регулярное выражение для удаления элементов OOXML и изменив свойства CSS.

Dim regX As Object
Set regX = CreateObject("VBScript.RegExp")

regX.Global = True
regX.MultiLine = True
regX.IgnoreCase = False
regX.Pattern = "<\/?w:[A-z].*?>"

CurrentMessage.HTMLBody = regX.Replace(CurrentMessage.HTMLBody, "")
CurrentMessage.HTMLBody = Replace(CurrentMessage.HTMLBody, "<p class=MsoNormal>", _
                            & "<p class=MsoNormal style='margin:0;line-height:0;'>")
Set regX = Nothing
person mafap    schedule 13.10.2017