2017-10-10 9 views
0

Outlookテンプレートをフォーマットしてボタンをクリックして送信するスクリプトを開発しています。 主な目標は、前後の間隔で1行間隔と0ptを使用し、テンプレートのすべてのコンテンツコントロール(コンボボックスなど)をテキスト/文字列に変換することです。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'の解析はあなたの最善の策のようです。 –

答えて

0

私は問題を解決するために、正規表現を使用して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 
関連する問題