Condividi:        

Immagine inserita nel corpo della mail con excel

Vuoi potenziare i tuoi documenti Word? Non sai come si fa una macro in Excel? Devi creare una presentazione in PowerPoint?
Oppure sei passato a OpenOffice e non sei sicuro di come lavorare al meglio?

Moderatori: Anthony47, Flash30005

Immagine inserita nel corpo della mail con excel

Postdi fulviot » 12/04/16 09:30

Ciao a tutti,
sono nuovo su questo forum, quindi se il mio topic è doppio mi scuso, ma non ho trovato nulla in merito al mio quesito.

io non sono un programmatore e la maggior parte dei termini che si usano in questi forum non li capisco, quindi vi chiedo di essere il più semplici possibile nelle risposte.

quello che mi serve è semplice.

ho un foglio excel con una semplice tabella, cliccando su un bottone vorrei che la tabella venisse trasformata in immagine ed inserita nel corpo di una mail che creo ad HOC.

1) creare l'immagine della tabella, lo ho fatto e per il momento lo inserisco in un nuovo foglio
2) creare la mail con destinatario, oggetto, testo nel corpo del messaggio lo ho fatto

quello che mi rimane da fare è inserire l'immagine appena creata nel corpo della mail, MA io non voglio salvare l'immagine su disco e poi collegarla con un tag html "<img src.....> quello che voglio fare io è inserire direttamente l'immagine come se facessi un CTRL+V visto che l'immagine creata rimane memorizzata negli appunti di windows.

NOTE: io uso excel 2010 con windows7 64 bit
fulviot
Utente Junior
 
Post: 33
Iscritto il: 12/04/16 09:21

Sponsor
 

Re: Immagine inserita nel corpo della mail con excel

Postdi Anthony47 » 12/04/16 11:55

Ciao fulviot, benvenuto nel forum.
Non voglio destabilizzare il lavoro gia' fatto, ma il mio suggerimento e' che crei all'interno di un foglio Excel il testo completo della mail, comprensivo della tabella; poi sfrutti la possibilita' di creare un testo gia' formattato tramite la funzione RangePublish che avevo pubblicato qui:
viewtopic.php?f=26&t=101351#p586218
La funzione (cosi' come e' descritta) richiede che sul tuo disco sia presente una directory C\PROVA, all'interno della quale sara' creato un file di servizio "myBDT.htm" (che tu puoi ignorare).

A quel punto compilerai il testo della mail con qualcosa come
Codice: Seleziona tutto
myMail.HTMLBody = RangePublish("NomeFoglio", "AreaDelMessaggio")   

Esempio:
Codice: Seleziona tutto
myMail.HTMLBody = RangePublish("Foglio2", "A1:E20") 


Per altri commenti sara' necessario che pubblichi il codice che usi per comporre e inviare la mail.

Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Immagine inserita nel corpo della mail con excel

Postdi fulviot » 12/04/16 15:00

Per cominciare ti ringrazio per la celere risposta,
ho letto la funzione che hai scritto è troppo complessa per le mie conoscenze e non saprei come integrarla nella mia macro.

però rimane il fatto che con il tuo sistema io vado a creare comunque un file su disco, cosa che vorrei evitare visto che il mio file excel dovrà essere aperto da PC differenti e non posso costringere tutti a crearsi una cartella per generare il file.

visto che con il comando sotto io riesco a creare l'immagine che rimane negli appunti di window, non è proprio possibile fare il paste sulla mail?

Foglio7.Range("A1:N" & numerorighe + 1 & "").CopyPicture
fulviot
Utente Junior
 
Post: 33
Iscritto il: 12/04/16 09:21

Re: Immagine inserita nel corpo della mail con excel

Postdi Anthony47 » 13/04/16 00:27

Per integrare la funzione devi copiarla in un Modulo del vba (va bene lo stesso in cui hai inserito il codice dell'invio) e poi la usi come ti ho detto.
Se vuoi evitare che sul Pc debba essere creata la cartella C:\PROVA allora si puo' usare la directory Temp; per questo devi sostituire la riga
TmpFile = "C:\PROVA\" & "myBDT.htm"
Con
Codice: Seleziona tutto
TmpFile = Environ("Temp") & "\myBDT.htm"


Per mettere una immagine "in linea" con il testo, il testo della mail deve essere formattato come htm; hai gia' fatto cosi'? Inoltre la gestione della clipboard di windows non e' semplice, ne' lo e' l'individuazione del punto del testo in cui inserire l'immagine.
L'alternativa proposta e' di creare con formule Excel il corpo della mail che includa il testo, la tabella e i saluti finali, e poi usare una funzione gia' pronta; se (come mi sembra di capire) padroneggi piu' excel che le macro mi pare la soluzione piu' comoda...

Poi se pubblichi il codice che usi ora per comporre e inviare la mail possiamo essere piu' propositivi.

Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Immagine inserita nel corpo della mail con excel

Postdi fulviot » 15/04/16 10:03

Ecco tutta la mia funzione, com'è oggi, ma essendo molto corta sono anche disposto a stravolgerla completamente

Sub Immagine2_Click()

Dim o As Object
Dim m As Object
Dim corpo As String
Dim oggetto As String
Dim Allegato As String
Dim indirizzoTO As String
Dim indirizzoCC As String
Dim numerorighe As Integer
Dim I As Integer


'qui creo l'immagine e la copio in un foglio di excel
numerorighe = Foglio7.UsedRange.Rows.Count
Foglio7.Unprotect ""
For I = 3 To numerorighe - 3
Foglio7.Cells(I, 12).Interior.ColorIndex = xlNone
Foglio7.Cells(I, 13).Interior.ColorIndex = xlNone
Next I
Foglio7.Protect ""
Foglio7.Range("A1:N" & numerorighe + 1 & "").CopyPicture
Foglio2.Activate
Foglio2.Cells(2, 2).Select
Selection.PasteSpecial


' qui inizio a costruire la mail
indirizzoTO = Foglio3.Cells(2, 2).Value
indirizzoCC = Foglio3.Cells(3, 2).Value
oggetto = Foglio3.Cells(5, 2).Value & " " & Foglio3.Cells(4, 2).Value & " del " & Format(Date, "DD_MM_YYYY")


' qui inizio a costruire il corpo della mail
corpo = "Ciao," & "<BR><BR>"
corpo = corpo & "In allegato trovate il Report relativo all'attività di <b> System Test </b> per la Release in oggetto, aggiornato al giorno <b>" & Format(Date, "DD/MM/YYYY") & "</b><BR><BR>"
corpo = corpo & "<b> - Scenari previsti: <font color='blue'>" & Foglio7.Cells(numerorighe - 1, 4).Value & "</font></b><BR>"
corpo = corpo & "<b> - Scenari N/A: <font color='blue'>" & Foglio7.Cells(numerorighe - 1, 10).Value & "</font></b><BR>"
corpo = corpo & "<b> - Scenari Fattibili: <font color='blue'>" & Foglio7.Cells(numerorighe - 1, 5).Value & "</font></b><BR>"
corpo = corpo & "<b> - Scenari OK: <font color='blue'>" & Foglio7.Cells(numerorighe - 1, 7).Value & "</font></b><BR>"
corpo = corpo & "<b> - Scenari Pending: <font color='blue'>" & Foglio7.Cells(numerorighe - 1, 8).Value & "</font></b><BR>"
corpo = corpo & "<b> - Scenari KO: <font color='blue'>" & Foglio7.Cells(numerorighe - 1, 9).Value & "</font></b><BR>"
corpo = corpo & "<b> - Scenari non avviati: <font color='blue'>" & Foglio7.Cells(numerorighe - 1, 5).Value - Foglio7.Cells(numerorighe - 1, 6).Value & "</font></b><BR>"
corpo = corpo & "<b> - Overall sul totale: <font color='blue'>" & Round(Foglio7.Cells(numerorighe, 13).Value * 100, 0) & "%</font></b><BR><BR>"


' qui genero la mail con i dati sopra costruiti
Set o = CreateObject("Outlook.Application")
Set m = o.CreateItem(0)
m.To = indirizzoTO
m.CC = indirizzoCC
m.Subject = oggetto
m.HtmlBody = corpo
'm.Send 'Se vuoi mandare subito la mail
m.Display 'Se vuoi visualizzarla
Set o = Nothing
Set m = Nothing

End Sub
fulviot
Utente Junior
 
Post: 33
Iscritto il: 12/04/16 09:21

Re: Immagine inserita nel corpo della mail con excel

Postdi fulviot » 15/04/16 10:14

Da quello che ho capito tu vorresti che io inserisca tutto quello che metto nel corpo, in un nuovo sheet(N) inserire nello stesso sheet(N) anche l'immagine e poi da qui ,usando la tua funzione, generare il documento HTML, dal quale poi recuperare tutto il source e metterlo nel body della mail.
se come dici sopra, il file lo si può mettere nella cartella temporanea, si potrebbe fare, ma ti prego aiutami a scrivere come fare, perché veramente io non so programmare.
fulviot
Utente Junior
 
Post: 33
Iscritto il: 12/04/16 09:21

Re: Immagine inserita nel corpo della mail con excel

Postdi Anthony47 » 15/04/16 23:39

Si, il mio suggerimento e' di creare in un nuovo foglio TESTOMAIL (ma per me puo' andare bene anche un foglio che hai gia'...) tutto il messaggio, da Egregio Signor Pincopalla a Cordiali saluti /Fulviot /Telefono fax e formule finali, compreso la TABELLA da cui siamo partiti, sotto forma di tabella e non di immagine.
Questo lo dovresti fare con formule che copiano i dati che ti servono nelle celle dove ricostruisci il testo completo della mail, e applicando alle celle il formato che ti interessa.

Se non sei un neofita penso che questo sia abbastanza facile da realizzare... Ho visto che molti dati sono da prendere sulla riga "numerorighe" e "numerorighe -1": se ti puo' semplificare la costruzione della mail, allora si puo' pensare che la macro scriva il valore di "numerorighe" in una cella del foglio TESTOMAIL e usare questo valore per far riferimento alle celle target.
Oppure (e mi sembra anche piu' semplice), si possono copiare in toto le righe "numerorighe-1" e "numerorighe" in testa al foglio TESTOMAIL cosi' rimane anche piu' semplice compilare il testo (le righe iniziali saranno ovviamente escluse quando richiameremo la funzione RangePublish).
Quello che non ho capito e' perche' l'immagine comprende anche le righe che in realta' fanno parte del testo della mail... Comunque nello schema che ti sto suggerendo non c'e' nessuna "immagine", ma la vera tabella questo significa che bisognera' fare una "copia" dell'intervallo di origine della tabella e un "incolla" su TESTOMAIL nella cella di inizio.

Ad esempio, supponendo che la tabella va posizionata a partire da B8 di TESTOMAIL:
Codice: Seleziona tutto
Foglio7.Range("A1:N" & numerorighe + 1 & "").Copy Destination:=Sheets("TESTOMAIL").Range("B8")


Per copiare "numerorighe" e "numerorighe -1" da Foglio7 a TESTOMAIL:
Codice: Seleziona tutto
Foglio7.Range("A" & numerorighe - 1).Resize(2, 15).Copy Destination:=Sheets("TESTOMAIL").Range("A1")

Copia le colonne A:N; se ne servono di piu' modificare quel 15 (15 colonne) nel numero che serve.

Mi permetto di segnalarti che trovo pericoloso il calcolo di
numerorighe = Foglio7.UsedRange.Rows.Count
UsedRange infatti e' gestito male da Excel, e lavorando sul foglio puo' portare a risultati erronei.

Sarebbe meglio fare riferimento a una colonna e cercare quale e' l'ultima riga occupata di quella colonna; tipo
Codice: Seleziona tutto
numerorighe = Foglio7.Cells(Rows.Count, "A").End(xlUp).Row

Questa ti restituisce l'ultima riga occupata di colonna A. Attenzione: non e' detto che restituisca lo stesso valore che ottenevi con UsedRange.

Alla fine la macro potrebbe avere questo aspetto:
Codice: Seleziona tutto
Sub Immagine2_Click()

Dim o As Object
Dim m As Object
Dim corpo As String
Dim oggetto As String
Dim Allegato As String
Dim indirizzoTO As String
Dim indirizzoCC As String
Dim numerorighe As Integer
Dim I As Integer

numerorighe = Foglio7.UsedRange.Rows.Count  '<<< VEDI TESTO
'qui copio la tabella in TESTOMAIL
Foglio7.Unprotect ""
'For I = 3 To numerorighe - 3
Foglio7.Cells(I, 12).Resize(numerorighe, 2).Interior.ColorIndex = xlNone
'Foglio7.Cells(I, 13).Interior.ColorIndex = xlNone
'Next I
Foglio7.Protect ""

Foglio7.Range("A1:N" & numerorighe + 1 & "").Copy Destination:=Sheets("TESTOMAIL").Range("B8")       <<< Vedi Testo

'Copiamo le righe "numerorighe - 1" e "numerorighe"  <<< Vedi Testo
Foglio7.Range("A" & numerorighe - 1).Resize(2, 15).Copy Destination:=Sheets("TESTOMAIL").Range("A1")

' qui inizio a costruire la mail
indirizzoTO = Foglio3.Cells(2, 2).Value
indirizzoCC = Foglio3.Cells(3, 2).Value
oggetto = Foglio3.Cells(5, 2).Value & " " & Foglio3.Cells(4, 2).Value & " del " & Format(Date, "DD_MM_YYYY")


' qui inizio a costruire il corpo della mail
'    E' tutto sostituito da quanto creato su foglio TESTOMAIL
'

' qui genero la mail con i dati sopra costruiti
Set o = CreateObject("Outlook.Application")
Set m = o.CreateItem(0)
m.To = indirizzoTO
m.CC = indirizzoCC
m.Subject = oggetto
'm.HtmlBody = corpo
m.HTMLBody = RangePublish("TESTOMAIL", "A3:N20")    '<<< Vedi testo
'm.Send 'Se vuoi mandare subito la mail
m.Display 'Se vuoi visualizzarla
Application.Wait (Now + TimeValue("0:00:02"))    '<<< Aggiunta
Set o = Nothing
Set m = Nothing

End Sub

Le righe marcate "<<< Vedi testo" vanno riviste, o perche' i parametri effettivi vanno adattati al tuo caso (es RangePublish) o perche' fanno riferimento a proposte che ho fatto e non sono certo che siano compatibili con quello che devi ottenere.

Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Immagine inserita nel corpo della mail con excel

Postdi fulviot » 19/04/16 13:52

Ok grazie Anthony,
- per quanto riguarda la tabella la ho già fatta, infatti quella di partenza è una tabella costruita quindi nel caso riportarla in un secondo sheet non ci dovrebbero essere problemi.
- per quanto riguarda il numerorighe = Foglio7.UsedRange.Rows.Count lo so che è pericoloso, ma la tua soluzione non è adattabile al mio caso, perché non ho una colonna utile da usare, ma per il momento quell'istruzione sta facendo il suo lavoro in modo corretto, terrò in considerazione la tua segnalazione per il futuro.
- l'immagine è stata pensata per evitare che ci ricevesse la mail potesse modificare i valori contenuti nello sheet

Adesso provo ad aggiornare la mia funzione con i tuoi suggerimenti e vedo cosa riesco a fare, ho solo due piccoli dubbi sul risultato finale, ma appena provo vedrò cosa succede.

Nel frattempo ti ringrazio sei stato gentilissimo e molto chiaro.
fulviot
Utente Junior
 
Post: 33
Iscritto il: 12/04/16 09:21

Re: Immagine inserita nel corpo della mail con excel

Postdi fulviot » 20/04/16 15:02

Ciao Anthony,
quando il sistema richiama la funzione che mi hai dato mi restituisce un errore, io richiamo la funzione nel seguente modo

m.HTMLBody = RangePublish("Foglio7", "A2:N20")

e l'errore me lo da al punto.

With ThisWorkbook.PublishObjects.Add(SourceType:=xlSourceRange, _
Filename:=TmpFile, _
Sheet:=mySh, _
Source:=PRan, _
HtmlType:=xlHtmlStatic

l'errore che mi da è:

Errore di run-time '1004'
Errore definito dall'applicazione o dall'oggetto
fulviot
Utente Junior
 
Post: 33
Iscritto il: 12/04/16 09:21

Re: Immagine inserita nel corpo della mail con excel

Postdi fulviot » 20/04/16 15:23

Ok ignora il posto precedente, ho trovato da solo la quadra, ma ho capito che mi sfugge qualche cosa di tutto il processo.

Con la funzione RangePublish creo il file htm e infatti sul disco lo trovo popolato con i miei dati, ma a questo punto come faccio ad inserire il contenuto del file nel corpo della mail?

il comando .HTMLBody = RangePublish .... non me lo inserisce nel body
fulviot
Utente Junior
 
Post: 33
Iscritto il: 12/04/16 09:21

Re: Immagine inserita nel corpo della mail con excel

Postdi Anthony47 » 20/04/16 22:36

Humm....
La Function RangePublish dovrebbe restituire il contenuto del file con queste istruzioni
Codice: Seleziona tutto
Set PubFile = FSO.OpenTextFile(TmpFile, 1, False)
  RangePublish = PubFile.ReadAll
PubFile.Close


Mi pubblichi il codice completo della funzione che stai usando?

Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Immagine inserita nel corpo della mail con excel

Postdi fulviot » 21/04/16 16:35

la funzione l'ho copiata dal post che avevi messo nel tread viewtopic.php?f=26&t=101351#p586218,
comunque ho provato a seguire un'altra strada leggendo altre tue risposte su altri tread. a quanto pare questo forum è tuo!! :D

ho optato per seguire una strada più vicina alla mia idea iniziale inserendo l'immagine in un chart e poi salvando il chart, come immagine JPG, nella cartella temp, da qui poi posso allegare l'immagine con il tag html <img scr...> e funziona bene.

si lo so non volevo salvare file sul disco, ma tra un file JPG o uno HTM, non c'è molta differenza, poi chiamando il file sempre nello stesso modo vado a sostituire quello vecchio con quello nuovo e non intaso il PC con troppi file.

devo solo capire un come migliorare le dimensioni del chart, magari rendendole dinamiche, ma qui devo trovare una soluzione su come convertire il numero di righe in dimensioni del chart, che mi sembra ragioni in pixel. Per il momento le ho messo fisse a 800x200.

Grazie 1000
fulviot
Utente Junior
 
Post: 33
Iscritto il: 12/04/16 09:21

Re: Immagine inserita nel corpo della mail con excel

Postdi Anthony47 » 23/04/16 01:10

Non so quale macro usi, ma qui avevamo usato una Sub convertiImm:
viewtopic.php?p=575442#p478997

Essa adatta la dimensione dell'immagine all'intervallo da inserirci.

Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Immagine inserita nel corpo della mail con excel

Postdi fulviot » 26/04/16 11:08

sono andato a vedere la funzione che dici sopra e per mio piacere è uguale a quello che avevo pensato e fatto io, per una volta ho fatto le cose a modo.

Grazie ancora per tutto il supporto che mi hai dato.
fulviot
Utente Junior
 
Post: 33
Iscritto il: 12/04/16 09:21


Torna a Applicazioni Office Windows


Topic correlati a "Immagine inserita nel corpo della mail con excel":


Chi c’è in linea

Visitano il forum: Nessuno e 35 ospiti

cron