SavePDF_Button.bas per Outlook: scegliere tra più cartelle di destinazione

| |

Mi permetto di ripubblicare un’email di Marcello, un lettore che mi ha contattato privatamente e che in totale autonomia ha modificato il comportamento del mio pulsante di estrazione PDF dalle email di Outlook per permettere all’utente di salvare gli allegati in cartelle differenti, il tutto tramite una semplice casella di controllo:

ciao Giovanni e scusa il disturbo,
ho utilizzato la tua macro “SavePDF_Button.bas” per inserire il pulsante sul menu di Outlook 2019, però per la mia esigenza
volevo aggiungere al pulsante una casella di controllo con tre opzioni, per scaricare la posta selezionata
in tre cartelle diverse; ma non trovo nel menu sviluppo ciò che serve per creare la casella di controllo.

Marcello mi ha autorizzato a ripubblicare il suo codice mettendolo a disposizione di tutti. Nulla è quindi cambiato sul modulo ufficiale completo che continuerai a trovare nel vecchio articolo SaveModule.bas 0.3 per Outlook 2016 (estrazione PDF dagli allegati), puoi però decidere di importare un codice sorgente leggermente differente che ti permette con una piccola ritoccata di estrarre i documenti PDF in cartelle da te precedentemente specificate.

Qualcuno ha detto cartelle?

Se la tua intenzione è quindi quella di archiviare documenti in cartelle ben precise puoi pensare di portare a bordo del tuo Outlook questo codice modificato mettendo mano al Select Case ButtonName e modificando le possibili destinazioni che Marcello ha inserito nella sua versione dello script.


Public Sub Estrai_PDF()
Dim ButtonName As String
ButtonName = "Estrai PDF"
Call ExportAttachments(ButtonName)
End Sub
Public Sub Estrai_Chiusure_PDF()
Dim ButtonName As String
ButtonName = "Estrai Chiusure PDF"
Call ExportAttachments(ButtonName)
End Sub
Public Sub Estrai_Fatture_PDF()
Dim ButtonName As String
ButtonName = "Estrai Fatture PDF"
Call ExportAttachments(ButtonName)
End Sub
Public Sub ExportAttachments(ButtonName As String)
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
' Get the path to your Desktop folder
strFolderpath = CreateObject("WScript.Shell").SpecialFolders(10)
On Error Resume Next
' Instantiate an Outlook Application object.
Set objOL = CreateObject("Outlook.Application")
' Get the collection of selected objects.
Set objSelection = objOL.ActiveExplorer.Selection
nomeFolder = IIf(ButtonName = "Estrai PDF", "", "\Archiviazione file\")
' Set the Attachment folder.
strFolderpath = strFolderpath & nomeFolder
' Create directory Attachments if not exist
If Dir(strFolderpath, vbDirectory) = "" Then
MkDir strFolderpath
End If
' Set the Attachment folder.
Select Case ButtonName
Case "Estrai PDF"
nomeFolder = "\Attachments\"
Case "Estrai Chiusure PDF"
nomeFolder = "\Chiusure\"
Case "Estrai Fatture PDF"
nomeFolder = "\Fatture\"
End Select
strFolderpath = strFolderpath & nomeFolder
If Dir(strFolderpath, vbDirectory) = "" Then
MkDir strFolderpath
End If
' Check each selected item for attachments.
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) & "-"
' Use a count down loop for removing items
' from a collection. Otherwise, the loop counter gets
' confused and only every other item is removed.
For i = lngCount To 1 Step -1
' Get the file name.
'strFile = objAttachments.Item(i).FileName
strFile = sName & objAttachments.Item(i).FileName
sFileType = LCase$(Right$(strFile, 4))
' Save the file only if is a PDF
Select Case sFileType
Case ".PDF", ".pdf"
' Combine with the path to the Temp folder.
strFile = strFolderpath & strFile
' Save the attachment as a file.
objAttachments.Item(i).SaveAsFile strFile
End Select
Next i
End If
Next
ExitSub:
Set objAttachments = Nothing
Set objMsg = Nothing
Set objSelection = Nothing
Set objOL = Nothing
End Sub

Io ringrazio Marcello per avermi permesso di pubblicare la sua modifica e come al solito ti ricordo che l’area commenti è a tua totale disposizione per richiedere ulteriori informazioni o rispondere a qualche tuo dubbio. Puoi usare invece Gist per proporre modifiche o miglioramenti al codice.

#StaySafe

Correzioni, suggerimenti? Lascia un commento nell'apposita area qui di seguito o contattami privatamente.
Ti è piaciuto l'articolo? Offrimi un caffè! ☕ :-)

L'articolo potrebbe non essere aggiornato

Questo post è stato scritto più di 5 mesi fa, potrebbe non essere aggiornato. Per qualsiasi dubbio ti invito a lasciare un commento per chiedere ulteriori informazioni! :-)

Condividi l'articolo con i tuoi contatti:
Subscribe
Notify of
guest

This site uses Akismet to reduce spam. Learn how your comment data is processed.

0 Commenti
Inline Feedbacks
View all comments