Partiamo dalla macro citata nel tuo post
viewtopic.php?f=26&t=87336&p=503469#p503251Qualche commento preventivo a questa macro:
Innanzitutto ti segnalo che nel codice "abbozzi" due calcoli diversi del testo della mail: (1) quando compili la variabile TestoEmail (ad esempio
TestoEmail = TestoEmail & Cells(RR, 3).Value & vbCrLf) e (2) quando compili la variabile BodyText (ad esempio
BodyText = BodyText & vbCrLf)); ma quando poi arrivi "al dunque" (istruzione .Body = BodyText) usi la variabile meno popolata, cioe' BodyText (che e' stata riempita solo di Cr/Lf, cioe' di "ritorno a capo").
Noi useremo arbitrariamente la variabile BodyText.
Come pure abbozzi il calcolo del "subject" della mail con l' istruzione
Subj = Workbooks("FATTURA-provaINVIO MAIL.xls").Worksheets("sollecito").Range("A1").Value ma poi usi una stringa fissa come Subject (istruzione
.Subject = "SOLLECITO di PAGAMENTO")
Assumo che la stringa fissa sia sufficiente.
Infine prendi l' indirizzo di destinazione nella cella K4; assumo che questo sia corretto, anche se nell' immagine il contenuto di K4 non e' visibile.
Cio' detto, supponiamo che tu voglia mettere nel body della mail il contenuto delle celle A20, A21, A22, E22, F22, G22, H22 e I22 del "foglio attivo".
Sostituirai tutta la prima parte della macro, con queste istruzioni:
- Codice: Seleziona tutto
BodyText = ""
BodyText = Range("A20").Text & vbCrLf
BodyText = BodyText & Range("A21").Text & " " & Range("A22").Text & vbCrLf
BodyText = BodyText & "N° " & Range("E22").Text & " " & Range("F22").Text & " "
BodyText = BodyText & Range("G22").Text & " " & Range("H22").Text & " "
BodyText = BodyText & Range("I22").Text & vbCrLf
'altre istruzioni per altre celle
'
Set OutApp = CreateObject("Outlook.Application") 'ESISTENTE
'etc etc 'La macro continua
So che ci sono altre celle che vuoi inserire in "BodyText", devi solo continuare con istruzioni simili a quelle che ti ho scritto io, scegliendo se in coda al testo di una cella vuoi inserire uno "spazio" (es & " ") o un "ritorno a capo" (es & vbCrLf).
Qualcuno osservera' la rozzezza del meccanismo (una sequenza di istruzioni per concatenare al testo calcolato il testo di una nuova cella), invece di creare un array con gli indirizzi delle celle e poi un loop
For I=LBound(MioArray,1) to UBound(MioArray,1) /Next I; ovviamente l' ho fatto apposta:
1, perche' cosi' l' utente sceglie dove mettere gli spazi e dove mettere il ritorno a capo
2, perche' cosi' mi limito a dare uno spunto invece che una soluzione bella e pronta
Prova e fai sapere.
Ciao