Vediamo come creare una macro tramite la quale inviare un singolo foglio di lavoro di Excel come allegato in un messaggio di posta elettronica.
Dovendo lavorare in ambiente VBA apriamo, in Excel 2010, la relativa finestra:
Scheda File – Opzioni – Personalizzazone 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_ActiveSheet()
'Working in 97-2010
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 I As Long
With Application
.ScreenUpdating = False
.EnableEvents = False
End With
Set Sourcewb = ActiveWorkbook
'Copy the sheet to a new workbook
ActiveSheet.Copy
Set Destwb = ActiveWorkbook
'Determine the Excel version and file extension/format
With Destwb
If Val(Application.Version) < 12 Then
'You use Excel 97-2003
FileExtStr = ".xls": FileFormatNum = -4143
Else
'You use Excel 2007-2010, we exit the sub when your answer is
'NO in the security dialog that you only see when you copy
'an sheet from a xlsm file with macro's disabled.
If Sourcewb.Name = .Name Then
With Application
.ScreenUpdating = True
.EnableEvents = True
End With
MsgBox "Your answer is NO in the security dialog"
Exit Sub
Else
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 If
End With
' 'Change all cells in the worksheet to values if you want
' With Destwb.Sheets(1).UsedRange
' .Cells.Copy
' .Cells.PasteSpecial xlPasteValues
' .Cells(1).Select
' End With
' Application.CutCopyMode = False
'Save the new workbook/Mail it/Delete it
TempFilePath = Environ$("temp") & "\"
TempFileName = "Part of " & Sourcewb.Name & " " _
& Format(Now, "dd-mmm-yy h-mm-ss")
With Destwb
.SaveAs TempFilePath & TempFileName & FileExtStr, _
FileFormat:=FileFormatNum
On Error Resume Next
For I = 1 To 3
.SendMail "", _
""
If Err.Number = 0 Then Exit For
Next I
On Error GoTo 0
.Close SaveChanges:=False
End With
'Delete the file you have send
Kill TempFilePath & TempFileName & FileExtStr
With Application
.ScreenUpdating = True
.EnableEvents = True
End With
End Sub
A questo punto in Excel basterà lanciare la macro Mail_ActiveSheet perchè il foglio in cui si è venga allegato ad un meggassio di posta elettronica.
La macro può essere scelta e avviata tramite il pulsante Macro presente nella scheda Sviluppo o nella scheda Visualizza.
Se vuoi rendere disponibile questa macro come componente aggiuntivo in modo tale che sia possibile averla a disposizione ogni volta che si avvia Excel, allora segui queste istruzioni.
Informatics, ski racer, loves travels, Finland, Norway, mountains, squash, photography, Drones and RC Helicopter
Grazie mille per il vostro aiuto. E’ stato utilissimo.
grazie
e se dovessi inviare via mail non un solo foglio excel ma un insieme di fogli selezionati (anche non adiacenti) è possibile?
Ho avuto modo di utilizzalo e funziona perfettamente.
Un piccolo appunto: la funzione .SendMail accetta solo tre argomenti – SendMail(Recipients, Subject, ReturnReceipt).
Domand: come faccio a inserire un breve (ad esempio: Leggi l’allegato) messaggio?
Grazie.
Grazie, non sai quanto mi sarà utile! Funziona perfettamente, proprio quello di cui avevo bisogno.
Grazie funziona perfettamente ,pero’ riporta anche le formule con i relativi riferimenti ad altri fogli e chi lo riceve vede #ND!Rif
in quelle celle in cui e’ contenuto molto testo (copia incolla da documento word inserito nella barra delle formule del foglio excel )
….esiste un metodo per rendere visibile il contenuto di quelle celle
GRAZIE GRAZIE Claudio
Funziona perfettamente, ma come faccio a modificarlo per le versioni successive di Office? Purtroppo sul mio pc mi hanno installato Office16 ed ora non riesco più a farla funzionare correttamente.
Grazie
@alessio: con Office 2016 funziona correttamente, sei sicuro di non avere le macro disabilitate in Excel?
Buonasera,
come posso creare un pulsante in Excel 2010, in modo che chi visualizza il mio file una volta compilato e cliccando su (un pulsante nominato “INVIA”) possa inviarmi tramite mail (Outlook) direttamente al mio indirizzo mail?
Resto in attesa di gentile riscontro.
cordiali saluti.
Gilberto
Buonasera,
Sei un genio! Che altro dire? Ti chiedo una piccola cortesia:
Per venire incontro alle mie esigenze desideravo chiederti se al codice VBA che hai creato potresti aggiungere che una volta aperta l’e-mail che contiene il foglio allegato mi venga automaticamente inserito l’indirizzo e-mail (Campo “A”) al quale inviare l’allegato, l’oggetto del messaggio ed il testo?
Ti ringrazio anticipatamente.
Cordiali saluti
Antonino da Palermo
Ciao Andrea, so che è possibile allegare ad una mail un foglio di lavoro Excel riuscendo a lavorare i vari filtri presenti direttamente dallo stamp del foglio allegato. Come si può fare per ottenere ciò?
Grazie