Yes, I'd seen that routine before. Unfortunately, it does not save the embedded files with their actual filename, but as generic filenames (Microsoft_Word_Document1, etc.). The filename is stored as the IconLabel of the InlineShapes.OLEFormat.
Since embedded objects (as opposed to linked objects) that aren't inserted as icons don't have an IconLabel, which I imagine is the vast majority of cases, you can't rely on that approach for anything other than a very small number of such objects.
Furthermore, your macro only works with InlineShape objects in the document's main story; it doesn't work with Shape objects or content anywhere other than in the body of the document (e.g. in textboxes, headers, footers, footnotes, endnotes, etc.). And, as
you've noted, it's functionality with PDFs is limited; it also doesn't work for any other object whose parent application isn't installed on the host PC. The code I posted handles
all embedded objects, regardless of the parent application and regardless of where they're found in the document.
Your code did not extract embedded pdf files (Insert object -> Display as icon). There were a couple of .bin files in the Embedded folder created, one of which might have been the embedded .pdf, but changing the extension to pdf did not work for either of
them. It is still useful code, depending upon what you are dealing with and what you need to do.
This is pretty much the only type of embedded object I need to deal with, so the code I have works well for those, unless as you noted, you do not have the application(s).
EDIT: also, I had to add a line to create the StrMediaFold to your example. I was getting an error that it didn't exist here:
FileCopy StrTmpFold & "" & StrMediaFile, StrMediaFold & "" & Split(Split(StrFileList, "|")(i), ".")(0) & StrMediaFile