Alberto credo ci sia un problema di fondo… ovvero fai un po di confusione.
Se hai un Oggetto MailItem, questo può contenere al sui interno come Allegato un Oggetto MailItem, marcato con MSG e questo accade quando si allega ad una Mail un'altra Mail, che a sua volta può contenere Allegati, quando un allegato è una Mail l'oggetto allegato è definito olEmbeddeditem.
Questo dovrebbe farti riflettere su come sarebbe opportuno modificare la Routine e prevedere una funzione esterna che cicla gli Allegati passando come parametro l'oggetto MailItem(object) in modo da sfruttarla in RICORSIONE su se stessa… ovvero, quando l'allegato è MSG, o meglionquandonil type=olEmbeddeditem allora mandi l'istanza MailItem alla funzione che cicla e vedrai che tutto funziona.
Per farlo purtroppo devi salvare il file e riaprirlo usando il metodo [OpenSharedItem], non è banalissimo ovviamente… ma si fa una cosa simile, quindi poi non serve discriminare se l'allegato è MSG o PDF…:
Option Compare Database
Option Explicit
Private objOL As Object
Private Sub EstrazioneAllegati()
Dim objAttachment As Object
Dim objSelection As Object
Dim objMsg As Object
Set objOL = GetObject(, "Outlook.Application")
If objOL Is Nothing Then
MsgBox "Outlook is not open"
Exit Sub
End If
Set objSelection = objOL.ActiveExplorer.Selection
For Each objMsg In objSelection
LoopAttachments objMsg
Next objMsg
ExitSub:
Set objMsg = Nothing
Set objSelection = Nothing
Set objOL = Nothing
End Sub
Function LoopAttachments(objMsg As Object)
Dim objAttachment As Object
Dim objEmbeddeditem As Object
Dim strFolderpath As String
Dim sExt As String
strFolderpath = "C:\Users\82501023\Desktop\"
For Each objAttachment In objMsg.Attachments
Debug.Print objAttachment.FileName
Select Case objAttachment.Type
Case Is = 5 'olEmbeddeditem
objAttachment.SaveAsFile strFolderpath & objAttachment.FileName
Set objEmbeddeditem = objOL.Session.OpenSharedItem(strFolderpath & objAttachment.FileName)
LoopAttachments objEmbeddeditem
objEmbeddeditem.Close 0 'olSave
Set objEmbeddeditem = Nothing
' Purtroppo sembra rimanga il File Bloccato dall'istanza ancora aperta...
' da fare qualche verifica
'Kill strFolderpath & objAttachment.FileName
Case Is = 1 'olByValue
objAttachment.SaveAsFile strFolderpath & objAttachment.FileName
End Select
Next objAttachment
End Function
Usa sempre la GUIDa quando usi il VBA serve capire ed usare gli Oggetti i Metodi e le proprietà adatte per lavorare BENE.