Solved

Extract multiple embedded MSG files from a Word document.

Posted on 2008-10-02
8
1,192 Views
Last Modified: 2011-10-19
Hello all :)

Hope someone can help.

I have a Word document which is currently version 2003 but can be saved in 2007 (.docx). Within the document are around 900 .msg files which now need to be extracted into a folder. I've tried highlighting them all and copy/paste into a folder but all I get is a Scrap file. If I select each one and copy/paste then it saves correctly.

Obviously, manually selecting each one and copy/pasting will take ages. I've also tried saving the document as a .docx and renaming it to a ZIP file in-order to look at the contents. However, the embedded .msg files are showing as .bin files.

I'd guess that the only way to do this is to code some sort of macro which can highlight, copy, paste (to folder) and highlight next one and repeat.

Can anyone assist me further?

Please note: these .msg files are actually Outlook contact cards. When you double click them they do open correctly in Outlook as a contact card. Just in case this is important.

Many thanks in advance :)
0
Comment
Question by:Boyderama
  • 4
  • 4
8 Comments
 
LVL 50

Expert Comment

by:Dave Brett
ID: 22622402
Can you pls post an example - ie with just a few of the addresses

Regards

Dave
0
 

Author Comment

by:Boyderama
ID: 22622476
Attached as requested. Thanks!
Example.doc
0
 
LVL 50

Expert Comment

by:Dave Brett
ID: 22623260
I ran this code over the sample file an it extrcated all four msg's into a directory, C:\mytmp

to run the code
Tools .. Macros .. Macro
and click
Runme

pls alter your folder path first

I did set a reference to the Outlook Object
- press ALt & F11
- Tools ... References
- tick the box next to Microsoft Outlook XX object Library

This reference should be set already  when you open the altered sample file below

Cheers

Dave


Sub RunMe()

    Dim olApp As Outlook.Application, x As Outlook.Inspector

    Set olApp = New Outlook.Application

    For Each obj In ActiveDocument.InlineShapes

        Set objole = obj.OLEFormat

        objole.DoVerb (wdOLEVerbShow)

        Set x = olApp.inspectors(1)

        'alter path below   

        x.CurrentItem.SaveAs "c:\mytmp\" & x.Caption & ".msg"

        SendKeys "{ESC}"

        x.Close (olDiscard)

    Next

End Sub

Open in new window

Example-1-.doc
0
 

Author Comment

by:Boyderama
ID: 22623378
I'm getting an error:

Microsoft Visual Basic

"Array index out of bounds."

Tried this in Office 2007 running on Vista and Office 2003 running XP in a VM.

I'd created a folder called c:\mytmp and double checked Microsoft Outlook 12 object Library was ticked. (11 for Office 2003).

Any ideas? Thank you very much for your help so far. Very kind :)
0
Why You Should Analyze Threat Actor TTPs

After years of analyzing threat actor behavior, it’s become clear that at any given time there are specific tactics, techniques, and procedures (TTPs) that are particularly prevalent. By analyzing and understanding these TTPs, you can dramatically enhance your security program.

 
LVL 50

Accepted Solution

by:
Dave Brett earned 500 total points
ID: 22624046
When I steped through this code in the VBE it worked, but running from the menu I had the same error you did

I have modified the approach below, this tested fine for me once I went back to late binding on Outlook. I suggest that you run this with Outlook alraedy open

Cheers

Dave
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
 

Sub RunMe()

    Dim olApp As Object, x As Object

    On Error Resume Next

    Set olApp = GetObject(, "Outlook.Application")

    On Error GoTo 0

    If olApp Is Nothing Then Set olApp = CreateObject("Outlook.Application")

  

    'close any existing Outlook windows

    For Each x In olApp.inspectors

        x.Close (olDiscard)

    Next
 

    For Each obj In ActiveDocument.InlineShapes

        Set objole = obj.OLEFormat

        Debug.Print objole.IconLabel

        objole.DoVerb (wdOLEVerbShow)

        SendKeys "{ESC}"

        Sleep 1000

        DoEvents

        For Each x In olApp.inspectors

            Debug.Print x.Caption

            x.CurrentItem.SaveAs "c:\mytmp\" & x.Caption & ".msg"

            x.Close (olDiscard)

        Next

    Next

End Sub

Open in new window

0
 

Author Comment

by:Boyderama
ID: 22632212
Fantastic! It failed a few times as some of the contact names had a \ or / in them. It was trying to name the file with an illegal symbol. Once I'd deleted those symbols it worked without a problem.

Dave, thank you very much for taking your time to help me. Not only did you save me a great deal of time by automating the process you also taught me some VB code :)

0
 

Author Closing Comment

by:Boyderama
ID: 31502295
Brilliant! Quick turnaround and VB code worked a treat. So kind and helpful. Thanks so much!
0
 
LVL 50

Expert Comment

by:Dave Brett
ID: 22632231
No probs. :)

I enjoyed this one as it was quite different - my google search turned up a fix for embedded xls objects but there wasn't anything I could find on extracting msg files. So I picked up a few new tricks on this one as well

Cheers

Dave
0

Featured Post

What Security Threats Are You Missing?

Enhance your security with threat intelligence from the web. Get trending threat insights on hackers, exploits, and suspicious IP addresses delivered to your inbox with our free Cyber Daily.

Join & Write a Comment

This article is meant to give a basic understanding of how to use R Sweave as a way to merge LaTeX and R code seamlessly into one presentable document.
This article descibes how to create a connection between Excel and SAP and how to move data from Excel to SAP or the other way around.
Viewers will learn how to properly install Eclipse with the necessary JDK, and will take a look at an introductory Java program. Download Eclipse installation zip file: Extract files from zip file: Download and install JDK 8: Open Eclipse and …
Access reports are powerful and flexible. Learn how to create a query and then a grouped report using the wizard. Modify the report design after the wizard is done to make it look better. There will be another video to explain how to put the final p…

707 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

15 Experts available now in Live!

Get 1:1 Help Now