Ciao Paolo,
piccole piccole dici .... mmm concordo sulla prima richiesta, la seconda invece non è così immediata. Vediamo:
- per rendere una cifra in migliara (separate da punto) e decimali (separati da virgola) puoi anteporre all'istruzione che rintraccia il valore nel foglio il comando format ad esempio in questo modo:
Format(Trim(Foglio1.Cells(riga, 9)),"#,##0.00")
- per quanto riguarda la firma e l'immagine. Per farlo occorre passare per i modelli di Outlook.
La prima cosa da fare consiste quindi nel creare un modello di messaggio outlook che abbia tutti i requisiti che ti occorrono (nel tuo caso mi pare di capire esclusivamente la firma e l'immagine)
Per farlo, nel caso ti occorra, puoi seguire la dettagliata guida di Roberto: Come fare a creare un Modello (Template). Salva il modello nella stessa cartella del foglio excel (va bene anche una cartella diversa purchè poi adegui il percoso nel codice che segue) con il nome ModelloMail.oft (anche per il nome vale la stessa indicazione
del percorso)
A questo punto utilizza il seguente:
Private Sub CommandButton1_Click()
Dim myOutlook As Object
Dim myMailItem As Object
Dim risp As Integer
Const accapo As String = "<BR>"
Dim variabileEmailDelDestinatario As String
Dim riga As Long
Dim fName As String
risp = MsgBox("VUOI INVIARE LE @ CON O SENZA GLI SCADUTI ???" _
, vbYesNoCancel + vbQuestion, "NON AGGIORNARE MAI IL LUNEDI' (SI = CON / NO = SENZA)")
If risp = vbYes Then 'se rispondo SI alla prima finestra
risp = MsgBox("AGGIORNATI SCADUTI , DATA DECORRENZA e NOTIFICA @ ???" _
, vbOKCancel + vbQuestion, "Vuoi Inviare le Quotazioni?")
If risp = vbOK Then 'se rispondo SI alla seconda finestra
Set myOutlook = CreateObject("Outlook.Application")
'fName = ActiveWorkbook.Path & "" & ActiveWorkbook.Name
fName = ActiveWorkbook.FullName
riga = 6
While (riga <= 7) 'modificare il numero fino alla riga che si intende inviare
variabileEmailDelDestinatario = Foglio1.Cells(riga, 20)
'Set myMailItem = myOutlook.CreateItem(0) 'olMailItem
Set myMailItem = myOutlook.CreateItemFromTemplate(ActiveWorkbook.Path _ & "\ModelloMail.oft") With myMailItem
.To = variabileEmailDelDestinatario
.Subject = "Quotazioni per il " & Date + 1 '& " e " & Date + 3
.BodyFormat = 2 'olFormatHTML
If Trim(Foglio1.Cells(riga, 23)) <> "" And Trim(Foglio1.Cells(riga, 27)) > 0 Then
.HTMLBody = tuo messaggio & .HTMLBody
ElseIf Trim(Foglio1.Cells(riga, 23)) = "" And Trim(Foglio1.Cells(riga, 27)) > 0 Then
.HTMLBody = tuo messaggio & .HTMLBody
ElseIf Trim(Foglio1.Cells(riga, 23)) <> "" And Trim(Foglio1.Cells(riga, 27)) <= 0 Then
.HTMLBody = tuo messaggio & .HTMLBody
ElseIf Trim(Foglio1.Cells(riga, 23)) <> "" Then
.HTMLBody = tuo messaggio & .HTMLBody
Else
.HTMLBody = tuo messaggio & .HTMLBody
End If
.Send
End With
riga = riga + 1
Wend
Set myOutlook = Nothing
Set myMailItem = Nothing
Else
MsgBox "Ho risposto ANNULLA alla seconda finestra"
End If
ElseIf risp = vbNo Then
'se rispondo NO alla prima finestra
risp = MsgBox("AGGIORNATI DATA DECORRENZA e NOTIFICA @ ???" _
, vbOKCancel + vbQuestion, "Vuoi Inviare le Quotazioni?")
If risp = vbOK Then 'se rispondo di nuovo SI alla seconda finestra
Set myOutlook = CreateObject("Outlook.Application")
'fName = ActiveWorkbook.Path & "" & ActiveWorkbook.Name
fName = ActiveWorkbook.FullName
riga = 6
While (riga <= 7) 'modificare il numero fino alla riga che si intende inviare
variabileEmailDelDestinatario = Foglio1.Cells(riga, 20)
'Set myMailItem = myOutlook.CreateItem(0) 'olMailItem
Set myMailItem = myOutlook.CreateItemFromTemplate(ActiveWorkbook.Path _ & "\ModelloMail.oft") With myMailItem
.To = variabileEmailDelDestinatario
.Subject = "Quotazioni per il " & Date + 1 '& " e " & Date + 3
.BodyFormat = 2 'olFormatHTML
If Trim(Foglio1.Cells(riga, 23)) <> "" And Trim(Foglio1.Cells(riga, 27)) > 0 Then
.HTMLBody = tuo messaggio & .HTMLBody
ElseIf Trim(Foglio1.Cells(riga, 23)) = "" And Trim(Foglio1.Cells(riga, 27)) > 0 Then
.HTMLBody = tuo messaggio & .HTMLBody
ElseIf Trim(Foglio1.Cells(riga, 23)) <> "" And Trim(Foglio1.Cells(riga, 27)) <= 0 Then
.HTMLBody = tuo messaggio & .HTMLBody
ElseIf Trim(Foglio1.Cells(riga, 23)) <> "" Then
.HTMLBody = tuo messaggio & .HTMLBody
Else
.HTMLBody = tuo messaggio & .HTMLBody
End If
.Send
End With
riga = riga + 1
Wend
Set myOutlook = Nothing
Set myMailItem = Nothing
Else
MsgBox "Ho risposto ANNULLA alla seconda finestra"
End If
Else
MsgBox "Ho risposto ANNULLA alla prima finestra"
End If
End Sub
Ho evidenziato le parti modificate/aggiunte, in particolare fai attenzione al "& .HTMLBody" che ho inserito quando componi il corpo della mail e alla modifica e spostamento di posizione dell'assegnazione "Set myMailItem = ...."
Ti rinnovo quindi la raccomandazione di utilizzare questo codice, inserendo le parti che ho omesso (il corpo della mail).
David