Hai bisogno di inviare fogli Excel selezionati come file allegato in Outlook? Segui i passaggi seguenti per creare una macro che ti permetta, dopo aver selezionato una serie di fogli in un flie di Excel, di inviare i fogli stessi come unico file allegato ad un messaggio di posta di Outlook.
Dovendo lavorare in ambiente VBA apriamo la relativa finestra.
In Excel 2007
Bottone di Office – Pulsante Opzioni di Excel – Impostazioni generali – Opzione Mostra scheda Sviluppo sulla barra multifunzione
A questo punto ritornando nella finestra di Excel verrà visualizzata anche la Scheda Sviluppo nella quale troviamo il pulsante Visual Basic
In Excel 2010/2013/2016
Scheda File – Opzioni – Personalizzazione barra multifunzione – Selezionare Sviluppo nella sezione Schede principali
A questo punto ritornando nella finestra di Excel verrà visualizzata anche la Scheda Sviluppo nella quale troviamo il pulsante Visual Basic
Nella finestra Visual Basic inserire un nuovo modulo (menù Inserisci – Modulo) quindi copiare il codice riportato qui sotto:
Sub Mail_Sheets_Array()
'Per Excel 2000-2016
Dim FileExtStr As String
Dim FileFormatNum As Long
Dim Sourcewb As Workbook
Dim Destwb As Workbook
Dim TempFilePath As String
Dim TempFileName As String
Dim OutApp As Object
Dim OutMail As Object
Dim sh As Worksheet
Dim TheActiveWindow As Window
Dim TempWindow As Window
With Application
.ScreenUpdating = False
.EnableEvents = False
End With
Set Sourcewb = ActiveWorkbook
With Sourcewb
Set TheActiveWindow = ActiveWindow
Set TempWindow = .NewWindow
TheActiveWindow.SelectedSheets.Copy
End With
TempWindow.Close
Set Destwb = ActiveWorkbook
With Destwb
If Val(Application.Version) < 12 Then
'You use Excel 97-2003
FileExtStr = ".xls": FileFormatNum = -4143
Else
'You use Excel 2007-2016
Select Case Sourcewb.FileFormat
Case 51: FileExtStr = ".xlsx": FileFormatNum = 51
Case 52:
If .HasVBProject Then
FileExtStr = ".xlsm": FileFormatNum = 52
Else
FileExtStr = ".xlsx": FileFormatNum = 51
End If
Case 56: FileExtStr = ".xls": FileFormatNum = 56
Case Else: FileExtStr = ".xlsb": FileFormatNum = 50
End Select
End If
End With
TempFilePath = Environ$("temp") & "\"
TempFileName = "Part of " & Sourcewb.Name & " " & Format(Now, "dd-mmm-yy h-mm-ss")
Set OutApp = CreateObject("Outlook.Application")
Set OutMail = OutApp.CreateItem(0)
With Destwb
.SaveAs TempFilePath & TempFileName & FileExtStr, FileFormat:=FileFormatNum
On Error Resume Next
With OutMail
.to = ""
.CC = ""
.BCC = ""
.Subject = "Inserire l'oggetto"
.Body = "Inserire il testo"
.Attachments.Add Destwb.FullName
.Display 'o utilizza .send per inviare automaticamente specificando nei campi sopra l'indirizzo del destinatario
End With
On Error GoTo 0
.Close savechanges:=False
End With
Kill TempFilePath & TempFileName & FileExtStr
Set OutMail = Nothing
Set OutApp = Nothing
With Application
.ScreenUpdating = True
.EnableEvents = True
End With
End Sub
Chiudere la finestra di Visual Basic
Selezionare i fogli che si vuole vengano inviati per email tramite Outlook quindi nella Scheda Visualizza o nella Scheda Sviluppo cliccare sul pulsante Macro, selezionare Macro Mail_Sheets_Array e cliccare su Esegui; si aprirà la finestra del nuovo messaggio di Outlook e come allegato ci sarà un file di Excel contenente i fogli che avete selezionato.
Per maggiore comodità si può aggiungere la Macro come pulsante nella Barra di Accesso Rapido, ovvero quella che contiene anche il comando Annulla; per fare questo selezionare Altri comandi… nel menù a discesa della barra di accesso rapido quindi in Scegli comandi da: selezionare Macro e infine selezionare Macro Mail_Sheets_Array e cliccare su aggiungi.
Informatics, ski racer, loves travels, Finland, Norway, mountains, squash, photography, Drones and RC Helicopter
Fatto ! Copiato e funziona! Tuttavia quando riapro la cartella , benché salvata con le macro ,non funziona più
Funziona alla grande… ma se volessi inviare il PDF del foglio excel anzichè l’excel stesso?