使用VBA将内容控制值转换为字符串

问题描述:

我正在开发一个脚本来格式化Outlook模板并通过单击按钮发送它。 主要目标是在间距之后/之前使用单行距离和0pt,并将模板上的所有内容控件(例如ComboBoxes)转换为文本/字符串。使用VBA将内容控制值转换为字符串

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元素,关键字替换...

此外,是否可以将内容控制选定值转换为普通文本?

+0

好吧,那么你打算如何将组合框“转换”为文本?具体到底是什么意思,以及你写的代码是什么,特别是在哪里以及它是如何工作的? –

+0

我的意思是,转换组合框选定的值,所以当有人转发/回复邮件时,其内容无法更改 – mafap

+0

我不熟悉Outlook对象模型,但快速浏览一下MailItem类显示它没有看起来没有任何'Controls'集合,所以解析'HtmlBody'似乎是你最好的选择。 –

我设法让我的问题通过使用正则表达式来移除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