Mastodon

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.

Devoxx4Kids Ated Lugano 2016: la terza edizione
Evidenziare automaticamente le celle modificate in Excel
Translate »