Mi era sfuggita la domanda " Mi resta da capire (e spero che qualcuno sia cosi' gentile da volermi aiutare...) come mettere i bold e cambiare colore al testo del messaggio"
Per questo pero' devi cambiare approccio e non inviare un semplice messaggio di testo ma un messaggio formattato html.
In linea di massima, puoi usare questa routine per compilare il messaggio html
- Codice: Seleziona tutto
Function RangePublish(ByVal mySh As String, ByVal PRan As String) As Variant
'Vedi http://www.pc-facile.com/forum/viewtopic.php?f=26&t=101351
'
Dim TmpFile As String, myBDT As String, PubFile
TmpFile = Environ("Temp") & "\myBDT.htm" 'Lavora in Temp
'Crea file html:
With ThisWorkbook.PublishObjects.Add(SourceType:=xlSourceRange, _
Filename:=TmpFile, _
Sheet:=mySh, _
Source:=PRan, _
HtmlType:=xlHtmlStatic)
.Publish (True)
End With
'
Set FSO = CreateObject("Scripting.FilesystemObject")
Set PubFile = FSO.OpenTextFile(TmpFile, 1, False)
RangePublish = PubFile.ReadAll
PubFile.Close
'
End Function
La function crea nella directory Temp un file myBDT.htm che poi sara' usato per popolare il testo html della mail.
Il codice e' da inserire in un modulo standard (va bene quello che gia'contiene la tua InvioemailOutlook) e va poi usato per compilare il testo html della mail, in sostituzione dei vari ".Body = MsgX".
Vedremo le modifiche alla macro piu' avanti.
Questo approccio presuppone infatti che da qualche parte sul tuo file tu abbia costruito il messaggio da inviare, completo di Preambolo e postambolo, con tutti i campi e le formattazioni che ti servono; quindi le modifiche sono sia al file di lavoro che alla macro.
Ad esempio (usando il file che hai pubblicato), in Foglio2 ho costruito nel range A3:B15 un ipotetico testo della email, come da immagine.
upload immagini gratis La cella A1 e' il numero di riga a cui il messaggio fa riferimento.
A3 e' calcolata con la formula
- Codice: Seleziona tutto
="Caro utente " & SCARTO(Foglio1!$E$1;A1-1;1)&" "&SCARTO(Foglio1!$E$1;A1-1;0)
A4 contiene invece
- Codice: Seleziona tutto
="Ti inviamo il riepilogo di quel che sai alla data di "&TESTO(OGGI();"gg-mmm-aaaa")
Da A5 verso il basso ci sono i nomi dei campi da inserire nel messaggio; il valore di Campo1 lo calcoli in B5 con la formula
- Codice: Seleziona tutto
=SCARTO(Foglio1!H$1;$A$1-1;0)
Analoghe formule userai per gli altri campi, usando sempre "$A$1-1" come scarto di righe.
Se i campi da inserire nel messaggio fossero contigui nel foglio di origine allora potresti usare in B5 la formula
=SCARTO(Foglio1!H$1;$A$1-1;RIF.RIGA(A1)-1) che poi puoi copiare verso il basso per ottenere il valore degli altri campi
adiacenti.
Sempre usando A1 come "offset" compilerai in altre aree di Foglio2 gli altri potenziali messaggi (che poi saranno scelti in funzione di "tipomail").
Tieni presente che il testo leggibile sara' solo quello compreso nei margini dell' intervallo che userai quando richiami la Function RangePublish; quindi nell' immagine di sopra il testo di riga 3, 4, 12 potrebbe essere troncato; per evitare questo rischio usa eventualmente "Unisci celle" per allargare le celle contenente testo lungo (come ho fatto io). Puoi vedere il testo prodotto aprendo col tuo browser il file myBDT.htm nella tua directory Temp, raggiungibile digitando "%temp%" (senza gli apici) nel box ricerca del pulsante Start di Windows.
La macro dovra' quindi compilare A1 di Foglio2 e inserire il giusto testo del messaggio nella email; vediamo le modifiche, che riguardano 3 aree all' interno del ciclo
For E = 2 To F /Next E.
1) Subito dopo la riga For E = 2 To F inserisci
- Codice: Seleziona tutto
Sheets("Foglio2").Range("A1").Value=E
Questo consente di compilare i vari messaggi con i campi appartenenti ai singoli utenti.
2) Modificheremo invece da
If Tipomail = "invia" Then (incluso) a
Set MyOlApp = CreateObject("Outlook.Application") (escluso; la riga quindi rimane).
Supponiamo che su Foglio2, in A3:B15 hai "compilato" il messaggio per tipomail="invia"; in J3:K20 invece il messaggio per tipomail="Aggiorna" e in Q3:R10 il messaggio per tipomail="supero".
Allora compilerai il messaggio "giusto" con le istruzioni
- Codice: Seleziona tutto
If Tipomail = "invia" Then myMess = RangePublish("Foglio2", "A3:B15")
If Tipomail = "aggiorna" Then myMess = RangePublish("Foglio2", " J3:K20")
If Tipomail = "supero" Then myMess = RangePublish("Foglio2", "Q3:R10")
3) infine infilerai il messaggio (sempre myMess, che ha un contenuto diverso a seconda di "tipomail"):
Per questo sostituirai tutto il ciclo
If Tipomail = "invia" Then
.Body = Msg1
ElseIf Tipomail = "aggiorna" Then
.Body = Msg2
ElseIf Tipomail = "supero" Then
.Body = Msg3
End IfCon
- Codice: Seleziona tutto
. HTMLBody = myMess
That's all, anche perche' mi cominciavo a stufare dell' argomento
Guardando la tua macro mi pare che la struttura dei tuoi dati siano diversi da quanto hai pubblicato, spero comunque che i concetti espressi sopra siano facilmente adattabili alla reale struttura.
Fai sapere come finisce...
Ciao