Esercitazione su Excel – Inviare email da Excel
Di solito, per inviare email si utilizzano client di posta elettronica come Outlook, Gmail e altri. Tuttavia, molte persone conservano dati in una cartella di lavoro Excel e devono condividere parte di tali informazioni con altri mentre le stanno elaborando. Per risparmiare tempo evitando di passare a un client di posta elettronica, desiderano inviare email direttamente da Excel. Questa guida passo passo mostra come inviare email da Excel in diverse situazioni.
Nota: prima di applicare i metodi seguenti, assicurati di aver configurato un client di posta elettronica Outlook sul tuo computer e di averlo impostato come client predefinito.
Indice:[ Nascondi ]
1. Nozioni di base sull’invio di email da Excel
Questa sezione presenta le nozioni fondamentali per inviare email direttamente da Excel.
1,1 Inviare email da Excel con le funzioni integrate di Excel
Se desideri inviare da Excel soltanto email semplici, con esclusivamente i campi A, Oggetto, Cc e corpo del messaggio, puoi utilizzare le funzioni integrate di Excel.
1,1.1 Inviare un’email da Excel mediante una formula
Come illustrato nella tabella seguente, per inviare email diverse da Excel in base ai campi specificati, puoi utilizzare i riferimenti di cella corrispondenti per creare formule HYPERLINK personalizzate. Una volta generati i collegamenti ipertestuali per le email, ti basterà fare clic su quello desiderato per inviare automaticamente il messaggio.
Nota: se nei campi A o Cc sono presenti più destinatari, separarli con un punto e virgola.

Questa sezione è suddivisa in quattro parti per illustrare i passaggi necessari ad aggiungere separatamente alla formula Hyperlink l’indirizzo email del destinatario, i destinatari in copia (Cc), l’oggetto e il testo del corpo del messaggio. Procedere come segue.
La sintassi e gli argomenti della funzione «HYPERLINK» sono i seguenti:
Sintassi
HYPERLINK(link_location, [friendly_name])
Argomenti
1,1.1,1 Aggiungere Indirizzo Email alla formula Hyperlink
In questo caso, si utilizza «mailto:» all’interno della formula per specificare il destinatario dell’email. Nell’esempio, l’indirizzo email del primo destinatario si trova nella cella B2; pertanto, è sufficiente aggiungere «mailto:» e farvi riferimento tramite la cella B2.
“mailto:”&B2
1. Seleziona una cella in cui inserire il collegamento ipertestuale. In questo esempio, è stata scelta la cella F2.
2. Inserisca quindi la seguente formula nella cella selezionata.
=HYPERLINK("mailto:"&B2) 
Nota: premendo il tasto «Invio», verrà creato un collegamento ipertestuale come mostrato nello screenshot seguente. Cliccando sul collegamento, si aprirà automaticamente una nuova email in Outlook con l’indirizzo del destinatario già inserito nel campo A.

L’indirizzo email del destinatario è ora stato aggiunto alla formula Hyperlink. Prosegui con i passaggi successivi per includere, se necessario, oggetto, destinatari in copia (Cc) e testo del corpo del messaggio.
1,1.1,2 Aggiungere i destinatari Cc alla formula Hyperlink
Per aggiungere destinatari in copia (Cc) alla funzione Hyperlink, inserisci «?cc=» direttamente nella formula, come mostrato di seguito.
La formula nella cella F2 dovrà essere la seguente:
=HYPERLINK("mailto:" & B2 & "?cc=" & C2) 
1,1.1,3 Aggiungere l’oggetto alla formula Hyperlink
Per aggiungere l’oggetto alla funzione Hyperlink, inserisci «&subject=» come parte della formula, come mostrato di seguito.
La formula nella cella F2 dovrà ora apparire nel modo seguente:
=HYPERLINK("mailto:" & B2 & "?cc=" & C2 & "&subject="& D2) 
1,1.1,4 Aggiungere il testo del corpo del messaggio con interruzioni di riga alla formula Hyperlink
L’ultimo passaggio consiste nell’aggiungere il testo del corpo del messaggio alla formula Hyperlink. Come si nota nell’esempio, le due righe di testo presenti in E2 sono separate da un’interruzione di riga e si desidera conservare questa formattazione nel corpo dell’email. Outlook riconosce l’interruzione di riga in questo caso? Verifichiamolo.
Per aggiungere il testo del corpo del messaggio alla formula Hyperlink, inserisci «&body=» come parte della formula, come mostrato di seguito.
La formula nella cella F2 viene ora visualizzata nel modo seguente:
=HYPERLINK("mailto:" & B2 & "?cc=" & C2 & "&subject="& D2 & "&body="& E2) 
Nota: se si preme il tasto «Invio» e si fa clic sul collegamento, in Nuova Email il contenuto del corpo dell’email verrà visualizzato su un’unica riga.

Per visualizzare il corpo dell’email su righe separate, aggiungi il codice «%0A» nel punto in cui desideri inserire un’interruzione di riga all’interno del contenuto della cella. Consulta lo screenshot:

1,1.1,5 Specificare il testo da visualizzare per il collegamento ipertestuale
Nei passaggi precedenti, l’argomento Link_location è stato completato con i campi dell’email. In questa sezione verrà invece compilato il successivo argomento [friendly_name].
In questo caso, si desidera che la cella del collegamento ipertestuale mostri il testo «Email a xx», dove «xx» corrisponde al nome del destinatario presente in A2. La formula in F2 dovrà quindi essere aggiornata come segue:
=HYPERLINK("mailto:" & B2 & "?cc=" & C2 & "&subject="& D2 & "&body="& E2, "Email to "&A2) Premere il tasto «Invio» per visualizzare il risultato.

Seleziona la cella contenente la formula e trascina la sua «maniglia di riempimento automatico» verso il basso per creare ulteriori collegamenti ipertestuali alle email. Vedi lo screenshot:

1,1.2 Inviare un’email da Excel con la funzione Hyperlink
Oltre alla formula HYPERLINK illustrata in precedenza, puoi creare manualmente un collegamento ipertestuale per l’email utilizzando la funzione «Crea collegamento ipertestuale» di Excel. Di seguito trovi i passaggi necessari.
1. Fare clic con il pulsante destro del mouse sulla cella in cui si vuole inserire un collegamento ipertestuale e scegliere «Collegamento» dal menu contestuale.

2. Nella finestra di dialogo «Crea collegamento ipertestuale» visualizzata, procedi come segue.

Facendo clic sul collegamento ipertestuale, verrà automaticamente creata un’email in Outlook con i campi A, Oggetto e Corpo già compilati, come illustrato nello screenshot seguente.

Note:
1,2 Inviare un’email a più destinatari presenti in celle mediante script VBA
Nell’esempio precedente si possono osservare più indirizzi email visualizzati in una singola cella, separati da punto e virgola. Se si dispone di un elenco di indirizzi email, come mostrato nello screenshot seguente, e si desidera inviare un’unica email oppure email distinte a tutti i destinatari, il codice VBA seguente potrà esserti d’aiuto.

1,2.1 Inviare un’email a più destinatari presenti in celle mediante script VBA
1. Nel foglio di lavoro contenente tutti gli indirizzi email a cui si desidera inviare il messaggio, premere i tasti «Alt» + «F11» per aprire la finestra «Microsoft Visual Basic, Applications Edition».
2. Nella finestra «Microsoft Visual Basic, Applications Edition», fai clic su «Inserisci» > «Modulo» e incolla il codice seguente nella finestra «Modulo (Codice)».

Codice VBA: inviare un’email a un elenco di Indirizzo Email
Sub sendmultiple()
'updateby Extendoffice 20220802
Dim xOTApp As Object
Dim xMItem As Object
Dim xCell As Range
Dim xRg As Range
Dim xEmailAddr As String
Dim xTxt As String
On Error Resume Next
xTxt = ActiveWindow.RangeSelection.Address
Set xRg = Application.InputBox("Please select the addresses list:", "Kutools for Excel", xTxt, , , , , 8)
If xRg Is Nothing Then Exit Sub
Set xOTApp = CreateObject("Outlook.Application")
For Each xCell In xRg
If xCell.Value Like "*@*" Then
If xEmailAddr = "" Then
xEmailAddr = xCell.Value
Else
xEmailAddr = xEmailAddr & ";" & xCell.Value
End If
End If
Next
Set xMItem = xOTApp.CreateItem(0)
With xMItem
.To = xEmailAddr
.Subject = "Test"
.Body = "Dear " _
& vbNewLine & vbNewLine & _
"This is a test email " & _
"sending in Excel"
.Display
End With
End Sub 3. Premere il tasto «F5» per eseguire il codice: verrà visualizzata la finestra di dialogo «Kutools per Excel». Selezionare l’elenco degli indirizzi email e fare clic su «OK».

Note:
.Body = "Dear " _
& vbNewLine & vbNewLine & _
"This is a test email " & _
"sending in Excel" Dopo l’esecuzione del codice, tutti gli indirizzi email presenti nell’intervallo selezionato verranno visualizzati nel campo A della finestra del messaggio. Vedere lo screenshot:

1,2.2 Inviare separatamente un’email a ciascun destinatario elencato nelle celle mediante script VBA
Il codice precedente aggiunge tutti gli indirizzi email presenti nell’intervallo selezionato al campo A della finestra del messaggio. Se invece desideri inviare un’email distinta a ciascun indirizzo dell’elenco presente nelle celle, garantendo che i destinatari non possano vedere gli indirizzi email degli altri, puoi utilizzare lo script VBA seguente.
1. Nel foglio di lavoro contenente tutti gli indirizzi email a cui si desidera inviare i messaggi, premere «Alt» + «F11» per aprire la finestra di Microsoft Visual Basic, Applications Edition.
2. Nella finestra «Microsoft Visual Basic, Applications Edition», fai clic su «Inserisci» > «Modulo», quindi incolla il codice seguente nella finestra «Modulo (Codice)».
Codice VBA: inviare un’email distinta a ciascun indirizzo Elenco indirizzi presente nelle celle
Sub SendEmailToAddressInCells()
'Updated by Extendoffice 20220802
Dim xRg As Range
Dim xRgEach As Range
Dim xRgVal As String
Dim xAddress As String
Dim xOutApp As Outlook.Application
Dim xMailOut As Outlook.MailItem
On Error Resume Next
xAddress = ActiveWindow.RangeSelection.Address
Set xRg = Application.InputBox("Please select the addresses list", "KuTools For Excel", xAddress, , , , , 8)
If xRg Is Nothing Then Exit Sub
Application.ScreenUpdating = False
Set xOutApp = CreateObject("Outlook.Application")
Set xRg = xRg.SpecialCells(xlCellTypeConstants, xlTextValues)
For Each xRgEach In xRg
xRgVal = xRgEach.Value
If xRgVal Like "?*@?*.?*" Then
Set xMailOut = xOutApp.CreateItem(olMailItem)
With xMailOut
.To = xRgVal
.Subject = "Test"
.Body = "Dear " _
& vbNewLine & vbNewLine & _
"This is a test email " & _
"sending in Excel"
.Display
'.Send
End With
End If
Next
Set xMailOut = Nothing
Set xOutApp = Nothing
Application.ScreenUpdating = True
End Sub 3. Fare quindi clic su «Strumenti» > «Riferimenti». Nella finestra di dialogo «Riferimenti – VBAProject», individuare e selezionare la casella «Microsoft Outlook 16,0 Object Library», quindi confermare con «OK» per salvare le modifiche.

4. Premere il tasto «F5» per eseguire il codice: verrà visualizzata la finestra di dialogo «Kutools per Excel». Selezionare l’elenco degli indirizzi email e fare clic su «OK».

Note:
.Subject = "Test"
.Body = "Dear " _
& vbNewLine & vbNewLine & _
"This is a test email " & _
"sending in Excel" Nell’esempio sono presenti sei indirizzi email in **Seleziona intervallo**; di conseguenza, verranno create automaticamente sei finestre di messaggio di Outlook, ciascuna con un indirizzo diverso nel campo **A**, come illustrato nello screenshot seguente.

5. Infine, fai clic sul pulsante «Invia» per inviare le email una alla volta.
2. Inserisci un allegato o la firma di Outlook nelle email inviate da Excel (con script VBA)
Questa sezione spiega come inserire un allegato o aggiungere la firma predefinita di Outlook alle email inviate da Excel.
2,1 Inserisci allegato nelle email inviate da Excel
Di seguito sono illustrati diversi casi d’uso per la funzione **Inserisci allegato**: scegli il metodo più adatto alle tue esigenze. In questa sezione scoprirai come procedere — fai clic su uno dei collegamenti seguenti per passare direttamente al metodo desiderato:
2,1.1 Inviare un file specifico come allegato
È possibile utilizzare il seguente codice VBA per inviare via email, direttamente da Excel, uno o più file presenti in una cartella come allegati.
1. Premere i tasti «Alt» + «F11».
2. Nella finestra «Microsoft Visual Basic for Applications» che si apre, fare clic su «Inserisci» > «Modulo», quindi incollare il seguente codice VBA nella finestra del modulo (Codice).
Codice VBA: Invia file in una cartella come allegati da Excel
Sub EmailWithAttachments()
'Updated by Extendoffice 20220802
Dim xStrFile As String
Dim xFilePath As String
Dim xFileDlg As FileDialog
Dim xFileDlgItem As Variant
Dim xOutApp As Outlook.Application
Dim xMailOut As Outlook.MailItem
Application.ScreenUpdating = False
Set xOutApp = CreateObject("Outlook.Application")
Set xMailOut = xOutApp.CreateItem(olMailItem)
Set xFileDlg = Application.FileDialog(msoFileDialogFilePicker)
If xFileDlg.Show = -1 Then
With xMailOut
.BodyFormat = olFormatRichText
.To = "xxx@aaa.com"
.Subject = "test"
.HTMLBody = "test"
For Each xFileDlgItem In xFileDlg.SelectedItems
.Attachments.Add xFileDlgItem
Next xFileDlgItem
.Display
End With
End If
Set xMailOut = Nothing
Set xOutApp = Nothing
Application.ScreenUpdating = True
End Sub Note:
3. Fare quindi clic su «Strumenti» > «Riferimenti». Nella finestra di dialogo «Riferimenti – VBAProject», individuare e selezionare la casella «Microsoft Outlook 16,0 Object Library», quindi confermare con «OK» per salvare le modifiche.

4. Premere il tasto «F5» per eseguire il codice: si aprirà una finestra «Sfoglia». Seleziona i file da allegare all'email e fai clic su «OK».

Si aprirà quindi una finestra di messaggio in cui i file selezionati saranno visibili come allegati nel campo Allegati.

2,1.2 Invia il Foglio di lavoro corrente come allegato
Per inviare il foglio di lavoro corrente come allegato direttamente da Excel, puoi utilizzare lo script VBA illustrato in questa sezione.
1. Premere i tasti «Alt» + «F11».
2. Nella finestra «Microsoft Visual Basic for Applications» che si apre, fai clic su «Inserisci» > «Modulo», quindi incolla il seguente codice VBA nella finestra «Modulo (Codice)».
Codice VBA: Invia il Foglio di lavoro corrente come allegato
Sub SendWorkSheet()
'Update by Extendoffice 20220802
Dim xFile As String
Dim xFormat As Long
Dim Wb As Workbook
Dim Wb2 As Workbook
Dim FilePath As String
Dim FileName As String
Dim OutlookApp As Object
Dim OutlookMail As Object
On Error Resume Next
Application.ScreenUpdating = False
Set Wb = Application.ActiveWorkbook
ActiveSheet.Copy
Set Wb2 = Application.ActiveWorkbook
Select Case Wb.FileFormat
Case xlOpenXMLWorkbook:
xFile = ".xlsx"
xFormat = xlOpenXMLWorkbook
Case xlOpenXMLWorkbookMacroEnabled:
If Wb2.HasVBProject Then
xFile = ".xlsm"
xFormat = xlOpenXMLWorkbookMacroEnabled
Else
xFile = ".xlsx"
xFormat = xlOpenXMLWorkbook
End If
Case Excel8:
xFile = ".xls"
xFormat = Excel8
Case xlExcel12:
xFile = ".xlsb"
xFormat = xlExcel12
End Select
FilePath = Environ$("temp") & "\"
FileName = Wb.Name & Format(Now, "dd-mmm-yy h-mm-ss")
Set OutlookApp = CreateObject("Outlook.Application")
Set OutlookMail = OutlookApp.CreateItem(0)
Wb2.SaveAs FilePath & FileName & xFile, FileFormat:=xFormat
With OutlookMail
.To = "xxx@aaa.com"
.CC = "Email Address"
.BCC = "Email Address"
.Subject = "kte features"
.Body = "Please check and read this document."
.Attachments.Add Wb2.FullName
.Display
'.Send
End With
Wb2.Close
Kill FilePath & FileName & xFile
Set OutlookMail = Nothing
Set OutlookApp = Nothing
Application.ScreenUpdating = True
End Sub Note:
3. Premere il tasto «F5» per eseguire il codice: il foglio di lavoro corrente verrà salvato come cartella di lavoro Excel e inserito automaticamente come allegato in una finestra di messaggio. Vedere screenshot:

Nota: la cartella di lavoro allegata, che contiene soltanto il Foglio di lavoro corrente, ha lo stesso nome della cartella di lavoro originale. Inoltre, al Nome Workbook viene aggiunto anche l’orario in cui è stato eseguito il codice.
2,1.3 Invia il Foglio di lavoro corrente come allegato
Dopo aver appreso il codice VBA per inviare il foglio di lavoro corrente come allegato da Excel, ecco un altro script VBA per inviare l’intera cartella di lavoro come allegato. Procedi come segue.
1. Premere i tasti «Alt» + «F11».
2. Nella finestra «Microsoft Visual Basic for Applications» che si apre, fai clic su «Inserisci» > «Modulo», quindi incolla il seguente codice VBA nella finestra del modulo (Codice).
Codice VBA: Invia il Foglio di lavoro corrente come allegato da Excel
Sub SendWorkBook()
'Update by Extendoffice 20220802
Dim OutlookApp As Object
Dim OutlookMail As Object
Set OutlookApp = CreateObject("Outlook.Application")
Set OutlookMail = OutlookApp.CreateItem(0)
On Error Resume Next
With OutlookMail
.To = "xxx@aaa.com"
.CC = "Email Address"
.BCC = "Email Address"
.Subject = "kte feature"
.Body = "Hello, please check and read this document, thank you."
.Attachments.Add Application.ActiveWorkbook.FullName
.Display
'.Send
End With
Set OutlookMail = Nothing
Set OutlookApp = Nothing
End Sub Note:
3. Premere il tasto «F5» per eseguire il codice: il foglio di lavoro corrente verrà automaticamente allegato alla finestra di messaggio. Vedere screenshot:

2,1.4 Invia l’intera cartella di lavoro come allegato PDF
La maggior parte degli utenti salva una cartella di lavoro Excel come file PDF per inviarla successivamente come allegato. In questa sezione ti mostriamo un metodo per inviare direttamente un’e-mail da Excel, allegando automaticamente la cartella di lavoro aperta in formato PDF, senza doverla salvare manualmente come file PDF.
1. Premere i tasti «Alt» + «F11».
2. Nella finestra «Microsoft Visual Basic for Applications» che si apre, fai clic su «Inserisci» > «Modulo», quindi incolla il seguente codice VBA nella finestra del modulo (Codice).
Codice VBA: Invia l’intera cartella di lavoro come allegato PDF
Sub SendWorkBookAsPDF()
'Update 20220803
Dim Wb As Workbook
Dim FilePath As String
Dim FileName As String
Dim xOutApp As Object
Dim xOutMail As Object
On Error Resume Next
Application.ScreenUpdating = False
Set Wb = Application.ActiveWorkbook
FileName = Left(Wb.Name, (InStrRev(Wb.Name, ".", -1, vbTextCompare) - 1)) & Format(Now, "dd-mmm-yy h-mm-ss") & ".pdf"
FilePath = Environ$("temp") & "\" & FileName
Wb.ExportAsFixedFormat Type:=xlTypePDF, FileName:= _
FilePath, Quality:=xlQualityStandard, _
IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:= _
False
Set xOutApp = CreateObject("Outlook.Application")
Set xOutMail = xOutApp.CreateItem(0)
With xOutMail
.To = "xxx@aaa.com"
.CC = "Email Address"
.BCC = "Email Address"
.Subject = "test"
.Body = "test"
.Attachments.Add FilePath
.Display 'or use .Send
End With
Kill FilePath
Set xOutMail = Nothing
Set xOutApp = Nothing
Application.ScreenUpdating = True
End Sub Note:
3. Premere il tasto «F5» per eseguire il codice: il foglio di lavoro corrente verrà automaticamente allegato come file PDF in una nuova finestra di messaggio. Vedere screenshot:

2,1.5 Invia il Foglio di lavoro corrente come allegato PDF
Ad esempio, immagina di avere una cartella di lavoro denominata «Vendite mensili» e di aver completato una tabella di report delle vendite in un foglio chiamato «Report vendite» che desideri inviare ai colleghi come file PDF. Il seguente codice VBA ti sarà d’aiuto.
1. Premere i tasti «Alt» + «F11».
2. Nella finestra «Microsoft Visual Basic for Applications» che si apre, fai clic su «Inserisci» > «Modulo», quindi incolla il seguente codice VBA nella finestra del modulo (Codice).
Codice VBA: Invia il Foglio di lavoro corrente come allegato PDF
Sub SendWorkSheetToPDF()
'Update by Extendoffice 20220803
Dim Wb As Workbook
Dim FileName As String
Dim OutlookApp As Object
Dim OutlookMail As Object
On Error Resume Next
Set Wb = Application.ActiveWorkbook
FileName = Wb.FullName
xIndex = VBA.InStrRev(FileName, ".")
If xIndex > 1 Then FileName = VBA.Left(FileName, xIndex - 1)
FileName = FileName & "_" + ActiveSheet.Name & ".pdf"
ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, FileName:=FileName
Set OutlookApp = CreateObject("Outlook.Application")
Set OutlookMail = OutlookApp.CreateItem(0)
With OutlookMail
.To = "xxx@aaa.com"
.CC = "Email Address"
.BCC = "Email Address"
.Subject = "test"
.Body = "test"
.Attachments.Add FileName
.Display
'.Send
End With
Kill FileName
Set OutlookMail = Nothing
Set OutlookApp = Nothing
End Sub Note:
3. Premere il tasto «F5» per eseguire il codice: il foglio di lavoro corrente verrà automaticamente allegato come file PDF in una nuova finestra di messaggio. Vedere screenshot:

2,2 Inserisci la firma di Outlook nelle email inviate da Excel
Prendendo come esempio il caso precedente, si applica il codice VBA sopra riportato per inviare il foglio di lavoro corrente come allegato PDF da Excel, ma non è possibile includere automaticamente la firma di Outlook nella finestra del messaggio. Per conservare la firma predefinita di Outlook nell’e-mail inviata da Excel, il metodo seguente risulterà particolarmente utile.
Di seguito trovi due codici VBA.
Codice VBA 1: questo codice ti permette di conservare la firma di Outlook.
Codice VBA 2: questo codice ti consente di inviare il foglio di lavoro corrente come allegato PDF.
Codice VBA 1: mantiene la firma di Outlook
.HTMLBody = "Email body" & "
" & .HTMLBody Codice VBA 2: invia il Foglio di lavoro corrente come allegato PDF
Sub SendWorkSheetToPDF()
'Update by Extendoffice 20220803
Dim Wb As Workbook
Dim FileName As String
Dim OutlookApp As Object
Dim OutlookMail As Object
On Error Resume Next
Set Wb = Application.ActiveWorkbook
FileName = Wb.FullName
xIndex = VBA.InStrRev(FileName, ".")
If xIndex > 1 Then FileName = VBA.Left(FileName, xIndex - 1)
FileName = FileName & "_" + ActiveSheet.Name & ".pdf"
ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, FileName:=FileName
Set OutlookApp = CreateObject("Outlook.Application")
Set OutlookMail = OutlookApp.CreateItem(0)
With OutlookMail
.To = "xxx@aaa.com"
.CC = "Email Address"
.BCC = "Email Address"
.Subject = "test"
.Body = "test"
.Attachments.Add FileName
.Display
'.Send
End With
Kill FileName
Set OutlookMail = Nothing
Set OutlookApp = Nothing
End Sub 1. Di solito, per aprire la finestra «Microsoft Visual Basic for Applications», è sufficiente premere i tasti «Alt» + «F11».
2. Nella finestra «Microsoft Visual Basic for Applications», fare clic su «Inserisci» > «Modulo», quindi incollare il codice VBA indicato sopra nella finestra Modulo (Codice).
3. Per conservare la firma predefinita di Outlook nelle email inviate da Excel, è necessario modificare il codice VBA 2 come segue:

Di seguito trovi il codice completo aggiornato.
Sub SendWorkSheetToPDF()
'Update by Extendoffice 20220803
Dim Wb As Workbook
Dim FileName As String
Dim OutlookApp As Object
Dim OutlookMail As Object
On Error Resume Next
Set Wb = Application.ActiveWorkbook
FileName = Wb.FullName
xIndex = VBA.InStrRev(FileName, ".")
If xIndex > 1 Then FileName = VBA.Left(FileName, xIndex - 1)
FileName = FileName & "_" + ActiveSheet.Name & ".pdf"
ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, FileName:=FileName
Set OutlookApp = CreateObject("Outlook.Application")
Set OutlookMail = OutlookApp.CreateItem(0)
With OutlookMail
.Display
.To = "xxx@aaa.com"
.CC = "Email Address"
.BCC = "Email Address"
.Subject = "test"
.HTMLBody = "Email body" & "
" & .HTMLBody
.Attachments.Add FileName
'.Send
End With
Kill FileName
Set OutlookMail = Nothing
Set OutlookApp = Nothing
End Sub 4. Premi il tasto «F5» per eseguire il codice: si aprirà una nuova finestra di messaggio con il foglio di lavoro corrente allegato come file PDF e la firma predefinita di Outlook inserita automaticamente in calce al corpo dell’email.

3. Invio automatico di email da Excel al verificarsi di una condizione (con script VBA)
Negli esempi precedenti è necessario eseguire manualmente il codice per inviare l’email. Se invece si desidera attivare automaticamente il codice al verificarsi di una determinata condizione – ad esempio quando una cella raggiunge un certo valore, quando il suo contenuto cambia o quando si arriva a una data specifica – l’email verrà inviata in modo automatico. Questa sezione presenta le condizioni più richieste dagli utenti di Excel su Google per inviare email automaticamente da Excel non appena si verifica una condizione specifica.
3,1 Invia automaticamente un’email quando una cella raggiunge un determinato valore
Come illustrato nello screenshot seguente, ipotizziamo di avere una tabella delle vendite in cui la cella D6 contiene il totale vendite. Si desidera inviare automaticamente un’e-mail al proprio responsabile in base a tale valore: ad esempio, generare e inviare automaticamente un’e-mail non appena il totale vendite supera 10.000, mentre nessuna azione viene intrapresa se il totale è pari o inferiore a 10.000.

1. Nel foglio di lavoro che contiene la tabella delle vendite, fai clic con il pulsante destro sulla scheda del foglio e seleziona «Visualizza codice» dal menu contestuale.

2. Nella finestra «Microsoft Visual Basic for Applications» che si apre, incolla il seguente codice VBA nella finestra «Foglio (Codice)».

Codice VBA: Invia automaticamente un’email quando una cella raggiunge un determinato valore in Excel
Dim xRg As Range
'Update by Extendoffice 20200803
Private Sub Worksheet_Change(ByVal Target As Range)
On Error Resume Next
If Target.Cells.Count > 1 Then Exit Sub
Set xRg = Intersect(Range("D6"), Target)
If xRg Is Nothing Then Exit Sub
If IsNumeric(Target.Value) And Target.Value > 10000 Then
Call Mail_small_Text_Outlook
End If
End Sub
Sub Mail_small_Text_Outlook()
Dim xOutApp As Object
Dim xOutMail As Object
Dim xMailBody As String
Set xOutApp = CreateObject("Outlook.Application")
Set xOutMail = xOutApp.CreateItem(0)
xMailBody = "Hi boss" & vbNewLine & vbNewLine & _
"Total sales of over $10,000 in January: " & Range("D6")
On Error Resume Next
With xOutMail
.To = "xxx@aaa.com"
.CC = "Email address"
.BCC = "Email address"
.Subject = "test"
.Body = xMailBody
.Display 'or use .Send
End With
On Error GoTo 0
Set xOutMail = Nothing
Set xOutApp = Nothing
End Sub
Private Sub Worksheet_Calculate()
Dim xI As Integer
Dim xRg As Range
Set xRg = Range("D6")
On Error GoTo Err01
xI = Int(xRg.Value)
If xI > 10000 Then
Call Mail_small_Text_Outlook
End If
Err01:
End Sub Note:
xMailBody = "Hi boss" & vbNewLine & vbNewLine & _
"Total sales of over $10,000 in January: " & Range("D6") D’ora in poi, ogni volta che il valore nella cella D6 supererà 10.000, verrà generata un’e-mail come illustrato nello screenshot seguente.

3,2 Invia automaticamente un’email quando il valore di una cella cambia
Come mostrato nello screenshot seguente, si supponga di ricevere una cartella di lavoro contenente le vendite mensili in diversi fogli e il totale vendite in un foglio specifico. È necessario verificare il totale vendite e, se quest’ultimo viene modificato, inviare nuovamente la cartella di lavoro al mittente informandolo che la cella è stata modificata.

1. Nel foglio di lavoro che contiene la tabella delle vendite, fai clic con il tasto destro sulla scheda del foglio e seleziona «Visualizza codice» dal menu contestuale.

2. Nella finestra «Microsoft Visual Basic for Applications» che si apre, incolla il seguente codice VBA nella finestra Foglio (Codice).
Codice VBA: Invia automaticamente un’email quando il valore di una cella specificata cambia
Private Sub Worksheet_Change(ByVal Target As Range)
'Updated by Extendoffice 20220803
Dim xRgSel As Range
Dim xOutApp As Object
Dim xMailItem As Object
Dim xMailBody As String
Dim xBoolean As Boolean
Dim xItsRG As Range
Dim xDDs As Range
Dim xDs As Range
On Error Resume Next
Application.ScreenUpdating = False
Application.DisplayAlerts = False
xBoolean = False
Set xRg = Range("B14")
Set xItsRG = Intersect(Target, xRg)
Set xDDs = Intersect(Target.DirectDependents, xRg)
Set xDs = Intersect(Target.Dependents, xRg)
If Not (xItsRG Is Nothing) Then
Set xRgSel = xItsRG
xBoolean = True
ElseIf Not (xDDs Is Nothing) Then
Set xRgSel = xDDs
xBoolean = True
ElseIf Not (xDs Is Nothing) Then
Set xRgSel = xDs
xBoolean = True
End If
ActiveWorkbook.Save
If xBoolean Then
Debug.Print xRgSel.Address
Set xOutApp = CreateObject("Outlook.Application")
Set xMailItem = xOutApp.CreateItem(0)
xMailBody = "The cell " & xRgSel.Address(False, False) & _
" in the worksheet '" & Me.Name & "' were modified on " & _
Format$(Now, "mm/dd/yyyy") & " at " & Format$(Now, "hh:mm:ss") & _
" by " & Environ$("username") & "."
With xMailItem
.To = "xxx@aaa.com"
.CC = "Email address"
.BCC = "Email address"
.Subject = "Worksheet modified"
.Body = xMailBody
.Attachments.Add (ThisWorkbook.FullName)
.Display
End With
Set xRgSel = Nothing
Set xOutApp = Nothing
Set xMailItem = Nothing
End If
Application.DisplayAlerts = True
Application.ScreenUpdating = True
End Sub Note: nel codice,
D’ora in poi, ogni volta che il valore nella cella B14 verrà modificato, verrà automaticamente generata un’email di Outlook come illustrato nello screenshot seguente.

3,3 Invia automaticamente un’email quando una cartella di lavoro viene salvata
Se devi condividere una cartella di lavoro con altri dopo averla modificata, di solito devi salvarla, aprire il client di posta elettronica, creare una nuova email allegando la cartella di lavoro, compilare i campi richiesti e inviare il messaggio. Questa sezione illustra un metodo per generare automaticamente un’email ogni volta che salvi la cartella di lavoro. Procedi come segue.
1. Premere i tasti «Alt» + «F11» per aprire la finestra di «Microsoft Visual Basic for Applications».
2. In questa finestra, fai doppio clic su «QuestaCartellaDiLavoro» nel riquadro «Progetto», quindi incolla il seguente codice VBA nella finestra «QuestaCartellaDiLavoro (Codice)».

Codice VBA: Invia automaticamente un’email quando una cartella di lavoro viene salvata
Private Sub Workbook_AfterSave(ByVal Success As Boolean)
'Updated by Extendoffice 20220804
Dim xOutApp As Object
Dim xMailItem As Object
Dim xName As String
On Error Resume Next
Set xOutApp = CreateObject("Outlook.Application")
Set xMailItem = xOutApp.CreateItem(0)
xName = ActiveWorkbook.FullName
With xMailItem
.To = "xxx@aaa.com"
.CC = "Email address"
.BCC = "Email address"
.Subject = "The workbook has been updated"
.Body = "Hi," & Chr(13) & Chr(13) & "File is now updated."
.Attachments.Add xName
.Display
'.send
End With
Set xMailItem = Nothing
Set xOutApp = Nothing
End Sub Note: nel codice,
3. D’ora in poi, ogni volta che si salva la cartella di lavoro — premendo «Ctrl» + «S» o facendo clic sul pulsante «Salva» — verrà creata automaticamente un’email di Outlook con il foglio di lavoro corrente allegato e i campi compilati con il contenuto specificato. Vedere screenshot:

Suggerimento: se utilizzi spesso questa cartella di lavoro, ti consigliamo di salvarla come «Cartella di lavoro abilitata alle macro di Excel» per conservare lo script VBA e riutilizzarlo in futuro. Ecco come fare.

3,4 Invia automaticamente un’email a un’ora specifica
Immagina di dover inviare ogni venerdì mattina alle 9 un'email con una cartella di lavoro contenente assegnazioni di attività a qualcuno, e di volerlo fare automaticamente in Excel senza dover utilizzare manualmente il client di posta elettronica. Questa sezione ti mostra come ottenere questo risultato.
1. Premere i tasti «Alt» + «F11» per aprire la finestra di «Microsoft Visual Basic for Applications».
2. Nella finestra «Microsoft Visual Basic for Applications», fai clic su «Inserisci» > «Modulo», quindi incolla il seguente codice VBA nella finestra del modulo.

Codice VBA 1: inviare la Foglio di lavoro corrente come allegato da Excel
Sub Timer()
If Weekday(Date) = vbFriday Then
SendWorkBook
Application.OnTime TimeValue("09:00:00"), "Timer"
Else
Application.OnTime TimeValue("09:00:00"), "Timer"
End If
End Sub
Sub SendWorkBook()
'Update by Extendoffice 20220802
Dim OutlookApp As Object
Dim OutlookMail As Object
Set OutlookApp = CreateObject("Outlook.Application")
Set OutlookMail = OutlookApp.CreateItem(0)
On Error Resume Next
With OutlookMail
.To = "xxx@aaa.com"
.CC = "Email Address"
.BCC = "Email Address"
.Subject = "kte feature"
.Body = "Hello, please check and read this document, thank you."
.Attachments.Add Application.ActiveWorkbook.FullName
.Display
'.Send
End With
Set OutlookMail = Nothing
Set OutlookApp = Nothing
End Sub 3. In questa finestra, fai doppio clic su «ThisWorkbook» nel riquadro «Progetto», quindi incolla il seguente codice VBA nella finestra «ThisWorkbook (Codice)».

Codice VBA 2: inviare automaticamente un'email a un orario specifico
Private Sub Workbook_Open()
Application.OnTime TimeValue("09:00:00"), "Timer"
End Sub Note:
4. Salvare i codici e quindi salvare la cartella di lavoro come cartella di lavoro abilitata alle macro di Excel, come indicato di seguito.

5. Apri la cartella di lavoro abilitata alle macro che hai salvato: un’email verrà creata o inviata automaticamente non appena si raggiungeranno il giorno e l’orario prestabiliti.
4. Argomenti aggiuntivi
Questa sezione raccoglie ulteriori argomenti che potrebbero emergere durante l’invio di email da Excel.
4,1 Inviare un intervallo di celle da Excel (con script VBA)
Immagina di avere una tabella delle vendite mensili in un foglio di lavoro Excel, come illustrato nell’immagine seguente, e di doverla inviare ad altre persone direttamente nel corpo dell’email o come allegato. Di seguito ti presentiamo due metodi semplici ed efficaci per farlo.

4,1.1 Inviare un intervallo come parte del corpo dell'email da Excel
È possibile utilizzare il seguente codice VBA per inviare un intervallo di celle direttamente nel corpo dell'email da Excel.
1. Premere i tasti «Alt» + «F11» per aprire la finestra di «Microsoft Visual Basic for Applications».
2. Nella finestra «Microsoft Visual Basic for Applications», fare clic su «Strumenti» > «Riferimenti», quindi selezionare la casella "Microsoft Outlook 16,0 Object Library" e confermare con «OK» nella finestra di dialogo «Riferimenti – VBAProject».

3. Fare clic su «Inserisci» > «Modulo», quindi incollare il seguente codice VBA nella finestra «Modulo (Codice)».
Codice VBA: inviare un intervallo di celle come parte del corpo dell'email da Excel
Sub SendARangeofCells()
'Updated by Extendoffice 20220809
Dim xRg As Range
Dim I, J As Long
Dim xAddress As String
Dim xMailOut As Object
Dim xOutApp As Object
On Error Resume Next
Set xOutApp = CreateObject("Outlook.Application")
Set xMailOut = xOutApp.CreateItem(olMailItem)
xAddress = ActiveWindow.RangeSelection.Address
Set xRg = Application.InputBox("Please select range you need to paste into email body", "KuTools For Excel", xAddress, , , , , 8)
If xRg Is Nothing Then Exit Sub
Application.ScreenUpdating = False
Set xOutApp = CreateObject("Outlook.Application")
Set xMailOut = xOutApp.CreateItem(olMailItem)
With xMailOut
.Subject = "test"
.To = "xxx@aaa.com"
.CC = "Email address"
.BCC = "Email address"
.HTMLBody = RangetoHTML(xRg)
.Display
'.Send
End With
Set xMailOut = Nothing
Set xOutApp = Nothing
Application.ScreenUpdating = True
End Sub
' The following VBA script is cited from this page:
' https://stackoverflow.com/questions/18663127/paste-excel-range-in-outlook
Function RangetoHTML(rng As Range)
' By Ron de Bruin.
Dim fso As Object
Dim ts As Object
Dim TempFile As String
Dim TempWB As Workbook
TempFile = Environ$("temp") & "/" & Format(Now, "dd-mm-yy h-mm-ss") & ".htm"
'Copy the range and create a new workbook to past the data in
rng.Copy
Set TempWB = Workbooks.Add(1)
With TempWB.Sheets(1)
.Cells(1).PasteSpecial Paste:=8
.Cells(1).PasteSpecial xlPasteValues, , False, False
.Cells(1).PasteSpecial xlPasteFormats, , False, False
.Cells(1).Select
Application.CutCopyMode = False
On Error Resume Next
.DrawingObjects.Visible = True
.DrawingObjects.Delete
On Error GoTo 0
End With
'Publish the sheet to a htm file
With TempWB.PublishObjects.Add( _
SourceType:=xlSourceRange, _
Filename:=TempFile, _
Sheet:=TempWB.Sheets(1).Name, _
Source:=TempWB.Sheets(1).UsedRange.Address, _
HtmlType:=xlHtmlStatic)
.Publish (True)
End With
'Read all data from the htm file into RangetoHTML
Set fso = CreateObject("Scripting.FileSystemObject")
Set ts = fso.GetFile(TempFile).OpenAsTextStream(1, -2)
RangetoHTML = ts.ReadAll
ts.Close
RangetoHTML = Replace(RangetoHTML, "align=center x:publishsource=", _
"align=left x:publishsource=")
'Close TempWB
TempWB.Close savechanges:=False
'Delete the htm file we used in this function
Kill TempFile
Set ts = Nothing
Set fso = Nothing
Set TempWB = Nothing
End Function Note: nel codice,
4. Premere il tasto "F5" per eseguire il codice. Nella finestra di dialogo «Kutools per Excel» che appare, selezionare l'intervallo di celle da includere nel corpo dell'email, quindi fare clic su «OK». Vedere l'immagine:

Verrà quindi creata automaticamente un'email di Outlook, con l'intervallo selezionato nel foglio di lavoro già inserito nel corpo del messaggio. Si veda l'immagine:

4,1.2 Inviare un intervallo come allegato da Excel
Se desideri inviare un intervallo di celle di un foglio di lavoro come allegato da Excel, puoi provare il seguente codice VBA.
1. Premere i tasti «Alt» + «F11».
2. Nella finestra «Microsoft Visual Basic for Applications» aperta, fai clic su «Inserisci» > «Modulo», quindi incolla il seguente codice VBA nella finestra «Modulo (Codice)».
Codice VBA: inviare un intervallo come allegato da Excel
Sub SendRange()
'Update 20220809
Dim xFile As String
Dim xFormat As Long
Dim Wb As Workbook
Dim Wb2 As Workbook
Dim Ws As Worksheet
Dim FilePath As String
Dim FileName As String
Dim OutlookApp As Object
Dim OutlookMail As Object
Dim WorkRng As Range
xTitleId = "KutoolsforExcel"
Set WorkRng = Application.Selection
Set WorkRng = Application.InputBox("Range", xTitleId, WorkRng.Address, Type:=8)
Application.ScreenUpdating = False
Application.DisplayAlerts = False
Set Wb = Application.ActiveWorkbook
Wb.Worksheets.Add
Set Ws = Application.ActiveSheet
WorkRng.Copy Ws.Cells(1, 1)
Ws.Copy
Set Wb2 = Application.ActiveWorkbook
Select Case Wb.FileFormat
Case xlOpenXMLWorkbook:
xFile = ".xlsx"
xFormat = xlOpenXMLWorkbook
Case xlOpenXMLWorkbookMacroEnabled:
If Wb2.HasVBProject Then
xFile = ".xlsm"
xFormat = xlOpenXMLWorkbookMacroEnabled
Else
xFile = ".xlsx"
xFormat = xlOpenXMLWorkbook
End If
Case Excel8:
xFile = ".xls"
xFormat = Excel8
Case xlExcel12:
xFile = ".xlsb"
xFormat = xlExcel12
End Select
FilePath = Environ$("temp") & "\"
FileName = Wb.Name & Format(Now, "dd-mmm-yy h-mm-ss")
Set OutlookApp = CreateObject("Outlook.Application")
Set OutlookMail = OutlookApp.CreateItem(0)
Wb2.SaveAs FilePath & FileName & xFile, FileFormat:=xFormat
With OutlookMail
.To = "xxx@aaa.com"
.CC = "Email address"
.BCC = "Email address"
.Subject = "Monthly sales for 2021"
.Body = "Hello, please check and read this document. "
.Attachments.Add Wb2.FullName
.Display
'.Send
End With
Wb2.Close
Kill FilePath & FileName & xFile
Set OutlookMail = Nothing
Set OutlookApp = Nothing
Ws.Delete
Application.DisplayAlerts = True
Application.ScreenUpdating = True
End Sub Note:
3. Premere il tasto "F5" per eseguire il codice. Nella finestra di dialogo «Kutools per Excel» che appare, selezionare l'intervallo di celle da inviare come allegato in un'email, quindi fare clic su «OK». Vedere l'immagine:

Verrà quindi creata automaticamente un'email di Outlook. L’intervallo di celle selezionato nel foglio di lavoro verrà salvato come cartella di lavoro Excel e allegato al messaggio. Vedere l’immagine:

4,2 Inviare email quando si fa clic su un pulsante in Excel
Se si desidera fare clic su un pulsante di comando per attivare una macro che invii un'email da Excel, ad esempio inviare la Foglio di lavoro corrente come allegato ad altre persone facendo clic su un pulsante nel foglio di lavoro, è possibile seguire i passaggi descritti di seguito per ottenere questo risultato.
1. Fare clic su «Sviluppo» > «Inserisci» > «Pulsante di comando (controllo ActiveX)», quindi disegnare un pulsante di comando direttamente nel foglio di lavoro.
Suggerimento: se hai già un pulsante di comando, salta questo passaggio.

2. Premere i tasti «Alt» + "F11" per aprire la finestra di Microsoft Visual Basic for Applications. Una volta aperta, fare clic su «Inserisci» > «Modulo» e incollare il codice VBA — quello utilizzato per inviare il foglio di lavoro corrente come allegato da Excel — nella finestra «Modulo (Codice)».
Fai clic qui per ottenere il codice.

Nota: in questo caso, il nome della macro creata al passaggio 2 è «SendWorkbook».
3. Premere i tasti «Alt» + «Q» per chiudere la finestra di «Microsoft Visual Basic for Applications».
4. Ora è il momento di assegnare la macro al pulsante di comando. Fai clic con il tasto destro sul pulsante e seleziona “Visualizza codice” dal menu contestuale.

5. Si aprirà quindi la finestra «Microsoft Visual Basic for Applications»; nella finestra «Foglio (Codice)» appariranno le due righe seguenti.
Private Sub CommandButton1_Click()
End Sub 
6. Inserisci il nome della macro esistente all'interno della subroutine associata al pulsante di comando.

7. Premere i tasti «Alt» + «Q» per chiudere l'«Editor di Visual Basic», quindi fare clic su «Sviluppo» > «Modalità progettazione» per disattivare la modalità progettazione.

Ora puoi fare clic sul pulsante di comando per inviare un'email con il foglio di lavoro corrente allegato.
4,3 Inviare email da un account email specifico
Di norma, quando si invia un'email da Excel tramite codice VBA, il mittente corrisponde all’account predefinito configurato in Outlook. Tuttavia, se hai impostato più account email in Outlook e desideri utilizzarne uno specifico—anziché quello predefinito—per inviare messaggi da Excel, il seguente codice VBA ti sarà utile.
In questo caso sono richiesti i seguenti codici.
Codice VBA 1:
Dim OutlookMail As Outlook.MailItem Codice VBA 2:
For Each xAccount In OutlookApp.Session.Accounts
If VBA.LCase(xAccount.SmtpAddress) = VBA.LCase("zxm@addin99.com") Then 'Specify your email account here
OutlookMail.SendUsingAccount = xAccount
End If
Next Come si utilizzano i codici VBA indicati sopra?
In questo esempio, si desidera specificare un determinato account email da cui inviare il foglio di lavoro corrente come allegato da Excel. Procedere come segue.
1. Premere i tasti «Alt» + "F11". Nella finestra «Microsoft Visual Basic for Applications», fare clic su «Strumenti» > «Riferimenti», quindi selezionare la casella "Microsoft Outlook 16,0 Object Library" e confermare con «OK» nella finestra di dialogo «Riferimenti – VBAProject».

2. Fare clic su «Inserisci» > «Modulo», quindi incollare il seguente codice VBA nella finestra «Modulo (Codice)».
Codice VBA: inviare la Foglio di lavoro corrente come allegato email da Excel tramite un account Outlook specifico
Sub SendWorkBook()
'Update by Extendoffice 20220809
Dim OutlookApp As Object
Dim OutlookMail As Outlook.MailItem 'important! Here can’t be declared as Object
Dim xAccount As Account
Set OutlookApp = CreateObject("Outlook.Application")
Set OutlookMail = OutlookApp.CreateItem(olMailItem)
On Error Resume Next
'The following lines helps to specify a certian email account
For Each xAccount In OutlookApp.Session.Accounts
If VBA.LCase(xAccount.SmtpAddress) = VBA.LCase("zxm@addin99.com") Then 'Specify your email account here
OutlookMail.SendUsingAccount = xAccount
End If
Next
'End
With OutlookMail
.To = "xxx@aaa.com"
.CC = "Email Address"
.BCC = "Email Address"
.Subject = "kte feature"
.Body = "Hello, please check and read this document, thank you."
.Attachments.Add Application.ActiveWorkbook.FullName
.Display
'.Send
End With
Set OutlookMail = Nothing
Set OutlookApp = Nothing
End Sub 3. Premere il tasto "F5" per eseguire il codice. Si aprirà quindi un messaggio email di Outlook, con il campo «Da» già compilato con l'account email specificato nel codice.
4,4 Inviare un'email quando viene raggiunta una data
Se si desidera inviare un'email in base a una specifica data di scadenza, come illustrato nell'immagine seguente, è presente una tabella di progetti: quando la data di scadenza nell'intervallo E2:E7 è uguale o precedente a 7 giorni rispetto a oggi (ipotizzando che la data odierna sia il 04/08/2022), verrà automaticamente inviata un'email ai responsabili dei progetti corrispondenti per avvisarli che il progetto sta per scadere.

1. Nel foglio di lavoro che contiene la tabella dei progetti, fai clic con il tasto destro sulla scheda del foglio e seleziona “Visualizza codice” dal menu contestuale.

2. Nella finestra «Microsoft Visual Basic for Applications» che si apre, incolla il seguente codice VBA nella finestra «Foglio (Codice)».
Codice VBA: inviare automaticamente un'email quando viene soddisfatta una Data di scadenza
Public Sub SendMailDueDate()
'Updated by Extendoffice 20220804
Dim xRgDate As Range
Dim xRgSend As Range
Dim xRgText As Range
Dim xRgDone As Range
Dim xOutApp As Object
Dim xMailItem As Object
Dim xLastRow As Long
Dim vbCrLf As String
Dim xMailBody As String
Dim xRgDateVal As String
Dim xRgSendVal As String
Dim xMailSubject As String
Dim i As Long
On Error Resume Next
Set xRgDate = Range("E2:E7") 'Please reference the due date column range
If xRgDate Is Nothing Then Exit Sub
Set xRgSend = Range("C2:C7") 'Please reference the email addresses column range
If xRgSend Is Nothing Then Exit Sub
Set xRgText = Range("D2:D7") 'Please reference the remark column range (the remark used to notify project leaders of the expiration of the project)
If xRgText Is Nothing Then Exit Sub
xLastRow = xRgDate.Rows.Count
Set xRgDate = xRgDate(1)
Set xRgSend = xRgSend(1)
Set xRgText = xRgText(1)
Set xOutApp = CreateObject("Outlook.Application")
For i = 1 To xLastRow
xRgDateVal = ""
xRgDateVal = xRgDate.Offset(i - 1).Value
If xRgDateVal <> "" Then
If CDate(xRgDateVal) - Date <= 7 And CDate(xRgDateVal) - Date > 0 Then
xRgSendVal = xRgSend.Offset(i - 1).Value
xMailSubject = xRgText.Offset(i - 1).Value & " on " & xRgDateVal
vbCrLf = "
"
xMailBody = ""
xMailBody = xMailBody & "Dear " & xRgSendVal & vbCrLf
xMailBody = xMailBody & "Remark : " & xRgText.Offset(i - 1).Value & vbCrLf
xMailBody = xMailBody & ""
Set xMailItem = xOutApp.CreateItem(0)
With xMailItem
.Subject = xMailSubject
.To = xRgSendVal
.CC = "Email address"
.BCC = "Email address"
.HTMLBody = xMailBody
.Display
'.Send
End With
Set xMailItem = Nothing
End If
End If
Next
Set xOutApp = Nothing
End Sub Note: nel codice,
3. Premere il tasto "F5" per eseguire il codice. Se la data di scadenza soddisfa le condizioni, verrà generata l’e-mail corrispondente. In questo caso, ne verranno create due, come mostrato nell’immagine seguente.

5. Uno strumento pratico per inviare email in modo semplice e veloce direttamente da Excel
Se non hai dimestichezza con VBA, i metodi descritti in precedenza potrebbero sembrarti complessi. Ti consigliamo quindi di utilizzare la funzionalità Invia emaildi «Kutools per Excel», che ti permette di inviare email direttamente da Excel con pochi e semplici clic. Ecco come procedere.
5,1 Creare facilmente un Elenco email contenente i campi email necessari
Prima di utilizzare la funzione Invia email, è necessario creare un Elenco email contenente i campi email richiesti. A questo scopo, la funzione Crea elenco di invio può rivelarsi estremamente utile.
1. Fare clic su «KUTOOLS PLUS» > «Crea elenco di invio».

2. Nella finestra «Crea elenco di invio» aperta, procedi come indicato di seguito.

Verrà quindi creata una tabella di esempio denominata «Elenco email», come illustrato nell'immagine seguente.

3. Ora sostituisci i dati originali nella tabella di esempio con i tuoi.

È stata ora creata una tabella Elenco email. Applica subito la funzione «Invia email» per inviare messaggi direttamente da Excel in base ai campi configurati.
Kutools per Excel– Potenzia Excel con oltre 300 strumenti essenziali, rendendo il tuo lavoro più veloce e semplice, e sfrutta le funzionalità basate sull’IA per un’elaborazione dati più intelligente e una maggiore produttività.Scaricalo ora
5,2 Invia facilmente email includendo i campi creati nella Elenco email
Dopo aver creato l’elenco email ()fai clic per scoprire come), che include i campi necessari per le tue email, puoi ora inviare messaggi direttamente da Excel utilizzando questi dati.
1. Seleziona l’intero elenco email, quindi fai clic su «Kutools Plus» > «Invia email».

2. Nella finestra di dialogo «Invia email», procedi come segue per configurare l’invio.

3. A questo punto si aprirà la finestra di dialogo «Kutools per Excel», che mostra quante email sono state inviate; fai clic su «OK» per chiuderla.
Suggerimento: puoi consultare la cartella «Posta inviata» di Outlook per verificare le email inviate.

5,3 Invia facilmente email con corpo in HTML (inclusi collegamenti ipertestuali, immagini, ecc.)
Questa funzione Invia email ti permette di creare un'email in HTML, completa di collegamenti ipertestuali, immagini, diverse dimensioni e colori del carattere, e molto altro.
Dopo aver creato un elenco email contenente i campi email necessari, quando configuri la finestra di dialogo Invia email, puoi arricchire il contenuto del corpo utilizzando le opzioni disponibili sulla barra degli strumenti.
Vedi lo screenshot qui sotto:

5,4 Inserisci facilmente la firma predefinita di Outlook durante l’invio delle email
Nel metodo illustrato in precedenza, abbiamo mostrato un codice VBA per inviare email con la firma predefinita di Outlook. Con la funzione Invia email, invece, ti basta selezionare un’opzione per inserire automaticamente la firma predefinita di Outlook nelle email inviate da Excel.
Dopo aver creato un elenco email contenente i campi email necessari, quando configuri la finestra di dialogo Invia email, fai clic su «Opzioni» > «Usa le impostazioni della firma di Outlook».
Nota: assicurati che sia presente un segno di spunta accanto all’opzione «Usa le impostazioni della firma di Outlook».

Quando i destinatari ricevono l’email, vedranno la firma predefinita di Outlook in calce al corpo del messaggio.
5,5 Invia facilmente email da un account email specifico
Per inviare messaggi da Excel utilizzando un account email specifico anziché quello predefinito, la funzione Invia email ti consente di farlo in modo semplice e diretto.
Dopo aver creato un elenco email contenente i campi necessari, quando configuri la finestra di dialogo Invia email, fai clic su «Opzioni» > «Inviato da» e seleziona l’account email da cui desideri inviare i messaggi.
Nota: dopo aver selezionato l’account email, comparirà un segno di spunta accanto a esso.

Fai clic qui per scoprire di più sulla funzione Invia email.
Kutools per Excel– Potenzia Excel con oltre 300 strumenti essenziali, rendendo il tuo lavoro più veloce e semplice, e sfrutta le funzionalità basate sull’IA per un’elaborazione dati più intelligente e una maggiore produttività.Scaricalo ora
In conclusione, inviare email da Excel si rivela estremamente utile nel lavoro quotidiano. Questo articolo affronta in modo esaustivo l’invio di email da Excel; se conosci altri approcci o soluzioni ancora più semplici, lascia un commento per condividerli con noi!
Migliori Strumenti per la Produttività in Office
Potenzia le tue competenze in Excel con Kutools per Excel e sperimenta un’efficienza mai vista prima.Kutools per Excel offre oltre 300 funzionalità avanzate per aumentare la produttività e Risparmia tempo.Clicca qui per ottenere la funzionalità di cui hai più bisogno...
Office Tab Porta l'interfaccia a schede in Office e rende il tuo lavoro molto più semplice
- Abilita la modifica e la lettura a schede in Word, Excel, PowerPoint, Publisher, Access, Visio e Project.
- Apri e crea più documenti in nuove schede all’interno della stessa finestra, invece che in finestre separate.
- Aumenta la tua produttività del 50 % e risparmia centinaia di clic del mouse ogni giorno!
Tutti i componenti aggiuntivi di Kutools in un unico programma di installazione.
Kutools for Office è la suite che include componenti aggiuntivi per Excel, Word, Outlook e PowerPoint, oltre a Office Tab Pro: la soluzione ideale per i team che lavorano su diverse app di Office.
- Suite completa— componenti aggiuntivi per Excel, Word, Outlook e PowerPoint + Office Tab Pro
- Un unico programma di installazione, una sola licenza— configurazione in pochi minuti (pronto per MSI)
- Funziona meglio insieme— produttività ottimizzata tra le app di Office
- Prova gratuita di 30 giorni con tutte le funzionalità— nessuna registrazione, nessuna carta di credito
- Miglior rapporto qualità-prezzo— risparmia rispetto all’acquisto dei singoli componenti aggiuntivi