<div dir="ltr"><div>I hate Microsoft&#39;s GUI interface, and I love Markdown (I am an active stackoverflow user). But for work, I have to use Outlook. So I thought, well, maybe I can write emails in Markdown, and use VBA to convert them.<br>
<br>This almost works, actually. The problem is that markdown doesn&#39;t create paragraphs the way Office wants them, when encoding the raw body text. Below is the VBA script I wrote... feel free to adapt and use, if you can figure out how to fix the paragraphing problem... but if you do, let me know! Note also that you should add a reference to the &quot;Microsoft Scripting Runtime&quot; in Tools -&gt; References.<br>
<br></div><div>Thanks in advance,<br></div><div>Jared<br></div><div><br>Option Explicit<br><br>Public Declare PtrSafe Sub Sleep Lib &quot;kernel32&quot; ( _<br>        ByVal dwMilliseconds As LongLong)<br><br></div>&#39; DON&#39;T FORGET TO CHANGE THESE<br>
<div>Private Const pathToPerl = &quot;C:\your\path\to\perl.exe&quot;<br>Private Const pathToScript = &quot;C:\your\path\to\Markdown.pl&quot;<br></div><div>Private Const tempFileName = &quot;\markdown.text&quot;<br></div><div>
<br>Sub Markdown()<br>    Dim myItem As MailItem<br>    Dim tempAbsolutePath As String<br>    Dim position As Long, endPosition As Long<br>    Dim prefix As String, converted As String<br><br></div><div>    &#39;get currently active email<br>
</div><div>    If (Not Application.activeInspector.IsWordMail) Then Exit Sub<br>    Set myItem = Application.activeInspector.CurrentItem<br>    <br>    If (Not myItem.BodyFormat = olFormatHTML) Then<br>        myItem.BodyFormat = olFormatHTML<br>
    End If<br>    <br>    position = InStr(1, myItem.HTMLBody, &quot;&lt;BODY&quot;, vbTextCompare)<br>    endPosition = InStr(position, myItem.HTMLBody, &quot;&gt;&quot;, vbTextCompare)<br>    prefix = Left$(myItem.HTMLBody, endPosition)<br>
    <br></div><div>    &#39; Store the in progress email in a temp file<br></div><div>    tempFileAbsolutePath = IIf(Environ$(&quot;tmp&quot;) &lt;&gt; &quot;&quot;, Environ$(&quot;tmp&quot;), Environ$(&quot;temp&quot;)) &amp; tempFileName<br>
    <br>    Open tempAbsolutePath For Output As #1<br>    Print #1, myItem.Body<br>    Close #1<br>    <br>    converted = ConvertFile(tempAbsolutePath)<br>    myItem.HTMLBody = prefix &amp; converted &amp; &quot;&lt;/body&gt;&lt;/html&gt;&quot;</div>
<div>End Sub<br><br>Private Function ConvertFile(emailFile As String)<br>    Dim oWsc As Object<br>    Set oWsc = CreateObject(&quot;WScript.Shell&quot;)<br>    Dim oExec As Object<br>    Dim execCommand As String<br>    execCommand = pathToPerl &amp; &quot; &quot; &amp; pathToScript &amp; &quot; &quot; &amp; emailFile<br>
<br>    Set oExec = oWsc.Exec(execCommand)<br>    While oExec.Status &lt;&gt; 1 &#39; Wait for process<br>        Sleep 100<br>    Wend<br>    ConvertFile = oExec.StdOut.ReadAll()<br>    Set oWsc = Nothing<br></div><div>    Set oExec = Nothing<br>
</div><div>End Function<br></div></div>