title: Selecting and copying Outlook email body with a VBA macro
body: <p>I'm a beginner to VBA macros in Excel, and this is the first attempt in Outlook, but here's what I am trying to do:</p>
  
  <p>In Outlook 2010, assign a macro to a button that, when pushed,</p>
  
  <ol>
  <li>Gets the entire body of the active email</li>
  <li>Copies the body including all formatting and html to the clipboard</li>
  <li>Opens a new word document</li>
  <li>Pastes the content of the clipboard to this word doc</li>
  <li>Clears the clipboard</li>
  </ol>
  
  <p>So far, all I have are steps 1 and 3 (and I wonder if I'm going about this the wrong way in step 1) below:</p>
  
  <pre><code>Sub pasteToWord()
  
      Dim activeMailMessage As Outlook.MailItem 'variable for email that will be copied.
      Dim activeBody
      Dim clearIt As String 'Intended to eventually clear clipboard.
  
  'Code to get to the body of the active email.
      If TypeName(ActiveExplorer.Selection.Item(1)) = "MailItem" Then _
      Set activeMailMessage = ActiveExplorer.Selection.Item(1)
      activeBody = activeMailMessage.Body
      'MsgBox activeBody
      '^This displayed what I want in plaintext form,
      'so I think im on the right track
  
  'Code to copy selection to clipboard
  
  'Code to open new Word doc
      Set WordApp = CreateObject("Word.Application")
      WordApp.Documents.Add
      WordApp.Visible = True
  
  'Code to paste contents of clipboard to active word document
  
  'Code to clear clipboard
  
  End Sub
  </code></pre>
  
  <p>Any guidance to fill in the blanks above would be much appreciated.</p>
  
  <p>Edit:</p>
  
  <p>Here is what has come the closest so far, thanks to  David Zemens.  I think I am missing some reference though, because my compiler doesn't understand "DataObject" for the ClearClipboard() function.  It does copy and paste into word with formatting though, as is below (though I had to comment out the last function to avoid errors):</p>
  
  <pre><code>Sub pasteToWord()
  
      Dim WordApp As Word.Application  'Need to link Microsoft Word Object library
      Dim wdDoc As Word.Document       'for these to be understood by compiler
      Dim activeMailMessage As Outlook.MailItem
      Dim activeBody As String
  
  If TypeName(ActiveExplorer.Selection.Item(1)) = "MailItem" Then
  
      'Get a handle on the email
      Set activeMailMessage = ActiveExplorer.Selection.Item(1)
  
      'Ensure Word Application is open
      Set WordApp = CreateObject("Word.Application")
  
      'Make Word Application visible
      WordApp.Visible = True
  
      'Create a new Document and get a handle on it
      Set wdDoc = WordApp.Documents.Add
  
      'Copy the formatted text:
      activeMailMessage.GetInspector().WordEditor.Range.FormattedText.Copy
  
      'Paste to the word document
      wdDoc.Range.Paste
  
      'Clear the clipboard entirely:
       Call ClearClipBoard
  
  End If
  
  End Sub
  
  Public Sub ClearClipBoard()
      Dim oData As New DataObject 'object to use the clipboard -- Compiler error, 
                                  'I think I'm missing a reference here.
  
      oData.SetText Text:=Empty 'Clear
      oData.PutInClipboard 'take in the clipboard to empty it
  End Sub
  </code></pre>