Come salvare il formato all'interno del file .Msg

di il
26 risposte

Come salvare il formato all'interno del file .Msg

Ciao a tutti

Salvo file in formato .Msg con:

objAttachments.Item(i).SaveAsFile strFile

dove all'interno ho un file in formato .pdf.

Come posso fare per salvare direttamente 

il file in .pdf che si trova all'interno?

Grazie.

26 Risposte

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

    Partendo dall'elemento Item

    02/09/2024 - AlbertoL ha scritto:

    Salvo file in formato .Msg con:

    objAttachments.Item(i).SaveAsFile strFile

    dove all'interno ho un file in formato .pdf.

    Vediamo se ho capito giusto: c'è un messaggio o in generale un Item che ha uno o più allegati. Uno di questi allegati lo salvi come file .msg. All'interno di questo nuovo file .msg (un messaggio di posta elettronica) c'è (almeno) un allegato in formato PDF che vorresti salvare/esportare. Una sorta di salvataggio di un allegato di un allegato. 

    E' giusta la mia ricostruzione?

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

    La collection Attachments, membro dell'Oggetto MailItem, consente di ciclare gli Allegati… tu hai provato a verificare quali allegati vedi prima… semplicemente stampando in Finestra immediata il nome…?

    Il codice che mostri è molto inutile, sembra un maldestro risultato di COPIA/INCOLLA… dovresti anche mostrare come arrivi a quel punto… 

    Dim objMsg 			As Object 'Outlook.MailItem
    Dim objAttachment	As Object   
    Dim strFolderPath 	As String
    
    strFolderPath = "C:\"
    
    Set objMsg=....? (come punti all'Item corretto o corrente..?)
    For each objAttachment in objMsg.Attachments
    	Debug.Print objAttachment.FileName
    	'objAttachment.SaveAsFile strFolderPath & objAttachment.FileName
    Next objAttachment

    Detto questo, se punti all'item GIUSTO il SaveAsFile salva nello stesso formato che trova… ma non ha il Path ovviamente, e devi aggiungerlo.

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

    Grazie 1000

    ora ci provo

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

    02/09/2024 - Philcattivocarattere ha scritto:


    Partendo dall'elemento Item

    02/09/2024 - AlbertoL ha scritto:

    Salvo file in formato .Msg con:

    objAttachments.Item(i).SaveAsFile strFile

    dove all'interno ho un file in formato .pdf.

    Vediamo se ho capito giusto: c'è un messaggio o in generale un Item che ha uno o più allegati. Uno di questi allegati lo salvi come file .msg. All'interno di questo nuovo file .msg (un messaggio di posta elettronica) c'è (almeno) un allegato in formato PDF che vorresti salvare/esportare. Una sorta di salvataggio di un allegato di un allegato. 

    E' giusta la mia ricostruzione?

    si

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

    02/09/2024 - AlbertoL ha scritto:


    Grazie 1000

    ora ci provo

    Cosa provi…? 

    Perchè non rispondi alle domande in modo compiuto…? 
    Ti ho chiesto di mostrare il codice che ci consente di capire cosa stai facendo… il codice che ti ho suggerito NON FUNZIONA così, è carente di un pezzo quello che avresti dovuto mostrare. 

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

    02/09/2024 - @Alex ha scritto:


    02/09/2024 - AlbertoL ha scritto:


    Grazie 1000

    ora ci provo

    Cosa provi…? 

    Perchè non rispondi alle domande in modo compiuto…? 
    Ti ho chiesto di mostrare il codice che ci consente di capire cosa stai facendo… il codice che ti ho suggerito NON FUNZIONA così, è carente di un pezzo quello che avresti dovuto mostrare. 

    scusa, eccolo qui

      Dim objOL As Outlook.Application
     Dim objMsg As Outlook.MailItem 'Object
     Dim objAttachments As Outlook.Attachments
     Dim objSelection As Outlook.Selection
     Dim i As Long
     Dim lngCount As Long
     Dim strFile As String
     Dim strFolderpath As String
     Dim strDeletedFiles As String
     Dim dtDate As Date
     Dim sName As String
     Dim nomeFolder As String
     Dim sFileType As String
     Dim b As Boolean
       
     strFolderpath = CreateObject("WScript.Shell").SpecialFolders(10)
     On Error Resume Next
     Set objOL = CreateObject("Outlook.Application")
       
     Set objSelection = objOL.ActiveExplorer.Selection

     nomeFolder = IIf(ButtonName = "Pul1", "", "\file\")
     strFolderpath = strFolderpath & nomeFolder
     If Dir(strFolderpath, vbDirectory) = "" Then
       MkDir strFolderpath
     End If
     nomeFolder = "\" & ButtonName & "\"

     strFolderpath = strFolderpath & nomeFolder
     If Dir(strFolderpath, vbDirectory) = "" Then
       MkDir strFolderpath
     End If
     For Each objMsg In objSelection
       Set objAttachments = objMsg.Attachments
       lngCount = objAttachments.Count
               
       If lngCount > 0 Then
         dtDate = objMsg.SentOn
         'dtDate = objMsg.ReceivedDate
         sName = Format(dtDate, "ddmmyyyy", vbUseSystemDayOfWeek, vbUseSystem) & "_" & Format(dtDate, "hhnnss", vbUseSystemDayOfWeek, vbUseSystem) & “-”

         For i = lngCount To 1 Step -1
           b = False
           strFile = sName & objAttachments.Item(i).FileName
           sFileType = LCase$(Right$(strFile, 4))
           Select Case sFileType
             Case ".MSG", ".Msg", ".msg"
               If ButtonName = "Pul1" Then
                 b = True
               End If
             Case ".PDF", ".Pdf", ".pdf"
                 b = True
           End Select
           If b = True Then
             strFile = strFolderpath & i & strFile
             objAttachments.Item(i).SaveAsFile strFile
           End If
         Next i
       End If
     Next
    ExitSub:
       
     Set objAttachments = Nothing
     Set objMsg = Nothing
     Set objSelection = Nothing
     Set objOL = Nothing

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

    Io penso tu faccia un po di confusione in realtà…

    Ho aggiustato il codice togliendo molte parti INUTILI:

    Private Sub EstrazioneAllegati()
        Dim objOL           As Object
        Dim objMsg          As Object
        Dim objAttachment   As Object
        Dim objSelection    As Object
        
        Dim strFolderpath   As String
        Dim sExt            As String
        
        strFolderpath = "C:\"
          
        Set objOL = CreateObject("Outlook.Application")
        Set objSelection = objOL.ActiveExplorer.Selection
        
        For Each objMsg In objSelection
            For Each objAttachment In objMsg.Attachments
                sExt = FileExt(objAttachment.FileName)
                Select Case sExt
                    Case "msg", "pdf"
                        objAttachment.SaveAsFile strFolderpath & objAttachment.FileName
                    Case Else
                        Debug.Print objAttachment.FileName
                End Select
            Next objAttachment
        Next objMsg
    ExitSub:
          
        Set objMsg = Nothing
        Set objSelection = Nothing
        Set objOL = Nothing
    End Sub
    
    Function FileExt(sFile As String)
        FileExt = Right(sFile, Len(sFile) - InStrRev(sFile, "."))
    End Function

    Ti assicuro che funziona provato, ricorda che VBA non è CASE SENSITIVE quindi tutti quei confronti non servono...

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

    03/09/2024 - @Alex ha scritto:


    Io penso tu faccia un po di confusione in realtà…

    Ho aggiustato il codice togliendo molte parti INUTILI:

    Private Sub EstrazioneAllegati()
        Dim objOL           As Object
        Dim objMsg          As Object
        Dim objAttachment   As Object
        Dim objSelection    As Object
        
        Dim strFolderpath   As String
        Dim sExt            As String
        
        strFolderpath = "C:\"
          
        Set objOL = CreateObject("Outlook.Application")
        Set objSelection = objOL.ActiveExplorer.Selection
        
        For Each objMsg In objSelection
            For Each objAttachment In objMsg.Attachments
                sExt = FileExt(objAttachment.FileName)
                Select Case sExt
                    Case "msg", "pdf"
                        objAttachment.SaveAsFile strFolderpath & objAttachment.FileName
                    Case Else
                        Debug.Print objAttachment.FileName
                End Select
            Next objAttachment
        Next objMsg
    ExitSub:
          
        Set objMsg = Nothing
        Set objSelection = Nothing
        Set objOL = Nothing
    End Sub
    
    Function FileExt(sFile As String)
        FileExt = Right(sFile, Len(sFile) - InStrRev(sFile, "."))
    End Function

    Ti assicuro che funziona provato, ricorda che VBA non è CASE SENSITIVE quindi tutti quei confronti non servono...

    Grazie Alex

    ho errore qui: FileExt

    sExt = FileExt(objAttachment.FileName)

    Sub o funzione non definita

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

    03/09/2024 - @Alex ha scritto:

    VBA non è CASE SENSITIVE

    Quasi sempre. Arrivo io a spiegare bene le cose, visto che su quelle parole non ci sono i puntini sulle i (forse perché non ci sono i?)

    Il 99,999998% dei casi (li ho analizzati tutti io) non je ne pò interessà de meno.

    Se però là in alto non c'è Option Compare, o c'è Option Compare Binary, allora diventa case sensitive.

    Nel 99,999998% c'è Option Compare Database e con il nostro LCID ignora maiuscole e minuscole. Poi ci sono le funzioni su stringhe che possono essere impostate ad hoc per la singola chiamata ma non è questo il caso.

    Continuo a non capire perché non riesca a risultare simpatico a tutti.

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

    03/09/2024 - AlbertoL ha scritto:

    ho errore qui: FileExt

    sExt = FileExt(objAttachment.FileName)

    Sub o funzione non definita

    Hai copiato anche il pezzo sotto del codice dove c'è la definizione della funzione?

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

    No

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

    03/09/2024 - Philcattivocarattere ha scritto:


    03/09/2024 - AlbertoL ha scritto:

    ho errore qui: FileExt

    sExt = FileExt(objAttachment.FileName)

    Sub o funzione non definita

    Hai copiato anche il pezzo sotto del codice dove c'è la definizione della funzione?

    hai ragione

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

    03/09/2024 - AlbertoL ha scritto:


    03/09/2024 - Philcattivocarattere ha scritto:


    03/09/2024 - AlbertoL ha scritto:

    ho errore qui: FileExt

    sExt = FileExt(objAttachment.FileName)

    Sub o funzione non definita

    Hai copiato anche il pezzo sotto del codice dove c'è la definizione della funzione?

    hai ragione

    grazie

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

    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… ;-()

Devi accedere o registrarti per scrivere nel forum
26 risposte