Come salvare il formato all'interno del file .Msg

di il
26 risposte

26 Risposte - Pagina 2

  • Re: Come salvare il formato all'interno del file .Msg

    Aggiungo: non scrivere un messaggio per ogni “stato d'avanzamento”, costituito da una o due parole e non quotare (anche te stesso) in toto, sempre (cd overquoting come mi insegno l'immenso Gibra).

  • Re: Come salvare il formato all'interno del file .Msg

    03/09/2024 - @Alex ha scritto:


    Alberto, direi che serve fare attenzione per non perdersi in un bicchiere d'acqua…!!!! (anche perchè poi Phil ne approfitta per dare peso e sostanza a cose che sono oggettivamente di rilievo sostanziale… ;-()

    Ottimo lavoro, però quando ho i file in formato .msg me li salva sempre in .msg

    mentre io vorrei che mi aprisse il file perchè all'interno c'è il formato in .pdf

    Ancora grazie

  • Re: Come salvare il formato all'interno del file .Msg

    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.

  • Re: Come salvare il formato all'interno del file .Msg

    03/09/2024 - @Alex ha scritto:


    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.

    grazie Alex

  • Re: Come salvare il formato all'interno del file .Msg

    Alberto, perchè QUOTARE tutto il messaggio…?
    Dai uno sforzo di buonsenso, sei nel Forum da almeno 8 mesi…!!

  • Re: Come salvare il formato all'interno del file .Msg

    Ok,

    singolarmente le due routine funzionano,

    ho provato ad unirle ma c'è qualcosa che sbaglio:

      Set objSelection = objOL.ActiveExplorer.Selection
     
     For Each objMsg In objSelection
       For Each objAttachment In objMsg.Attachments
         strTime = Replace(Time, ":", "")
         sExt = FileExt(objAttachment.FileName)
         b = False
         Select Case sExt
           Case "pdf"
             b = True
             objAttachment.SaveAsFile strFolderpath & strTime & objAttachment.FileName
           Case Else
             Select Case objAttachment.Type
               Case Is = 5 'olEmbeddeditem
                 objAttachment.SaveAsFile strFolderpath & objAttachment.FileName
                 Set objEmbeddeditem = objOL.Session.OpenSharedItem(strFolderpath & strTime & objAttachment.FileName)
                 LoopAttachments objEmbeddeditem
                 objEmbeddeditem.Close 0 'olSave
                 Set objEmbeddeditem = Nothing
                 Call DelaySecs(1)
                 Kill strFolderpath & objAttachment.FileName
               Case Is = 1 'olByValue
                 b = True
                 objAttachment.SaveAsFile strFolderpath & strTime & objAttachment.FileName
             End Select
    '          If b = True Then
    '            objAttachment.SaveAsFile strFolderpath & strTime & objAttachment.FileName
    '          End If
         End Select
       Next objAttachment
     Next objMsg

  • Re: Come salvare il formato all'interno del file .Msg

    Usa i tag code quando posti del codice, anche questo dovresti saperlo.

    E poi cosa non va? 

  • Re: Come salvare il formato all'interno del file .Msg

    Prima cosa il codice va inserito usando “INSERISCI BLOCCO CODICE” il pulsantino sull'editor.

    Secondo perchè hai pensato di unirle…? 
    Hai aggiunto ancora la parte che guarda l'Estensione che non serve a nulla… il PDF viene salvato nel CASE=1 ovvero olByValue… sei certo di aver capito cosa ti ho suggerito…?

    Mi pare tanto tu sia in discreta difficoltà con le basi del codice… mi fermo perchè ritenevo che il codice suggerito sopra, fosse completo, ma se lo modifichi e non funziona… almeno cerca di capire se le modifiche che hai fatto hanno senso….!!!!

  • Re: Come salvare il formato all'interno del file .Msg

    Ok grazie

  • Re: Come salvare il formato all'interno del file .Msg

    Dove posso trovare la corrispondenza a numeri di objAttachment.Type?

    cioè: 1,2,3, ecc

    grazie

  • Re: Come salvare il formato all'interno del file .Msg

    Https://learn.microsoft.com/en-us/office/vba/api/outlook.olattachmenttype

  • Re: Come salvare il formato all'interno del file .Msg

    04/09/2024 - oregon ha scritto:


    Https://learn.microsoft.com/en-us/office/vba/api/outlook.olattachmenttype

    grazie oregon

Devi accedere o registrarti per scrivere nel forum
26 risposte