› Sviluppare funzionalita su Microsoft Office con VBA › aprire outllook con mail predisposta
-
AutoreArticoli
-
buonasera ed eccomi per cercare ancora il vostro aiuto
gazie a voi e alle ricerche di tutto quanto presente nel forum, ho finito di fare il file con tutti i codici per inserire nella userform i valori e poi copiarli in un foglio "archivio" del file
ho rinunciato alla userform per la ricerca nell'archivio che ho risoltto con una macro su un foglio appoggio
ora vengo al punto
a seconda che in una combobox ci sia un valore piuttosto che un altro, la macro dovrebbe aprire outlook e impostare una serie di indirizzi mail come A_destinatario e per Cc_conoscenza legati appunto al tipo di valore, un oggetto specifico (anch'esso diverso a seconda del valore della stessa combobox) e un testo standard
non mi serve che la mail venga inviata perchè l'operazione deve essere manuale
allego un file in cui la stessa operazione la faccio con una formula e un collegamento ipertestuale (copiato da un file non mio)
è fattibile?
Allegati:
You must be logged in to view attached files.Ciao,
innanzitutto prova a dare uno sguardo a questa discussione e vedi se puoi trovare degli spunti utili
intanto grazie
il tuo codice presente al primo post nella discussione che mi hai linkato apre outlook perfettamente
ora ci vuole la variabile sul valore della combobox che determina i campi destinatario specifici in base appunto al valore
nella discussione linkata non mi pare di poter ricavare altro
ora ci vuole la variabile sul valore della combobox che determina i campi destinatario specifici in base appunto al valore
Ma nel file allegato non ci sono combobox nè sul foglio nè in una userform. Il campo .To del codice di Alex accetta una stringa, poi le cose cambiano se la combobox è un controllo modulo sul foglio, un activex sul foglio o un controllo di una userform.
Nel file reale, com'è la situazione?
pardon
il file è lo steso della discussione #45791 e lo allego di nuovo
la combobox è la 3 che preleva i dati da una colonna del foglio anagrafica
a seconda del valore di questa, l'elenco destinatari cambia
devo ancora implementare sul foglio anagrafica questo elenco di destinatari perchè non so se metterne uno per cella o tutti in una cella sola divisi da ;
Allegati:
You must be logged in to view attached files.non so se metterne uno per cella o tutti in una cella sola divisi da ;
Io preferirei questa soluzione, per l'utente è più facile scrivere tutti i destinatari in fila. Ma alla fine non cambia niente
la combobox è la 3 che preleva i dati da una colonna del foglio anagrafica
a seconda del valore di questa, l'elenco destinatari cambia
Io non ho capito dove ti inceppi... il valore della tua combo è naturalmente "Combobox3" sul quale fai una semplice Select Case per determinare il range di indirizzi. Le possibilità sono diverse e dipende dallo stile di scrittura (Choose, Switch, ecc.)
Io farei una variabile a livello di modulo che raccoglie il contenuto del range dei destinatari scelti in funzione della scelta operata con la combobox interessata. Poi passerei questa variabile al campo .To al momento del confezionamento della mail.
Questo potrebbe anche essere implementato creando un function privata che restituisce il valore del range scelto invece che creare una variabile di modulo... Una combobox a due colonne, di cui la seconda nascosta che contiene il range di riferimento: quando scegli un valore dalla combo hai giaà il range da cui pescare i dati... ripeto, molti modi. Provane uno.
'in testa al modulo la variabile di modulo private dest as string Private Sub ComboBox3_AfterUpdate() dim s as string s = trim(combobox3) if s = "" then exit sub select case s case "prima opzione della combo" dest = range("...") 'cella del primo elenco di destinatari case "seconda opzione della combo" dest = range("...") 'cella del secondo elenco di destinatari case "terza opzione della combo" dest = range("...") 'cella del terzo elenco di destinatari end select End SubCiao gagen,
l'ultimo allegato che hai caricato è diverso rispetto a quello che avevo implementato io 2 giorni fa. Come mai? Metterai poi tutte le modifiche insieme alla fine oppure hai fatto marcia indietro e trovato altre strade? Centra qualcosa con questa tua affermazione qui di seguito?
ho rinunciato alla userform per la ricerca nell'archivio che ho risoltto con una macro su un foglio appoggio
Hai incontrato difficoltà che non riesci a risolvere?
Poi rispetto alla richiesta di questo Thread...potresti spiegare meglio il risultato che vuoi ottenere? Parti dall'inizio elencando i passaggi che hai in mente e l'obiettivo finale da raggiungere. Perdonami ma sto provando a leggere la tua richiesta ma non riesco a comprenderla (problema mio ovviamente
).Il difficile è sempre mettere insieme pezzi diversi e mantenere la coerenza
no no ma che ti scusi anche? ci mancherebbe!! s3 non ci foste voi generosi per noi sarebbe tutto impossibile!!
il file è diverso perché poi trasporto e metto insieme le soluzioni sul mio
la rinuncia è solo una info extra che era più chiaro se non davo ahah!
cerco di essere più chiaro
una volta che si clicca sul comando invia che copia una serie di dati della userform nel foglio archivio (codice fatto e non presente nell'allegato) si deve aprire Outlook
i campi di A e Cc (e magari capito il croterio fare da solo anche l'oggetto e il testo) vorrei preimpostarli prendendo indirizzi diversi a seconda del valore della combo3 alimentata da un range inserito direttamente nelle proprietà della stessa
questi indirizzi posso inserirli preventivamente nel foglio anagrafica (non l'ho acora fatto per il dubbio espresso prima)
spero di essere stato più chiaro
grazie infinite per la pazienza!!
spero di essere stato più chiaro
mmmhh....poco.
una volta che si clicca sul comando invia che copia una serie di dati della userform nel foglio archivio (codice fatto e non presente nell'allegato)
perché non si può vedere questo codice che hai fatto?
Come suggerito da VF, la situazione migliore sarebbe lavorare sul file master così da mantenere una certa coerenza.
Cmq ritornando al problema mail...ci vuole un esempio più pratico...
i campi di A e Cc (e magari capito il croterio fare da solo anche l'oggetto e il testo) vorrei preimpostarli prendendo indirizzi diversi a seconda del valore della combo3 alimentata da un range inserito direttamente nelle proprietà della stessa
da dove li vuoi prendere questi indirizzo? In quale celle risiedono? Che valore può assumere la ComboBox3 affinché bisogna considerare un intervallo di indirizzi email piuttosto che un altro? La ComboBox3 prende i valori dall'intervallo "F2:F10"...perché è un intervallo fisso? Non è meglio renderlo dinamico attraverso codice VBA?
Da quel poco che ho capito, sembra che ti aspetti che se in ComboBox3 scelgo il valore GIALLO, allora nel campo dei Destinatari dovranno esserci gli indirizzi email di:
Tizio@email.it; Caio@email.it; Sempronio@email.it
se invece scelgo ROSSO allora gli indirizzi dovranno essere:
Paperino@email.it; Gastone@email.it; Paperoga@email.it
può essere così lo scenario?
Ti mostro un piccolo esempio (in fase di realizzazione ovviamente) dove in colonna V ci sono una serie di indirizzi mail e in colonna F ci sono dei valori (a, b, c).
La ComboBox3 assume questi valori e se scegli per esempio la b allora verranno presi in considerazione le mail dalla cella V5 alla V7. Stesso discorso per gli altri valori.
Ovviamente non conoscendo da dove e come si devono pescare tutti i valori, ti ho mostrato questo esempio, ma si può fare anche diversamente.
Cmq ti rigiro il file a cui ho lavorato 2 giorni fa, incluso questo esempio.
Allegati:
You must be logged in to view attached files.ok
nei prossimi giorni guardo di provare perché col ragionamento ci siamo
ho da andare in giro per lavoro e dubito di trovare tempo subito.
il codice che ho inserito è semplicissimo (se l'ho completato io!!) quindi niente che non si possa vedere.... è solo che il file è pieno di dati sensibili e solo per questo i file di esempio sono così scarni e per questo mi scuso
la combo3 effettivamente ha valori predefiniti e fissi quindi credo che il tuo codice possa fare al caso mio!!
appena riesco provo a trasferirlo sul mio file
ancora grazie per la pazienza!!
funziona modificato tra i suggerimenti di entrambi
messo per comodità sotto un pulsante
sicuramente è semplificabile ma funziona
per ora le variabili fisse della combobox mi bastano ma lo porto all'attenzione dei colleghi che lo useranno e vediamo se le variabili sono molte di più. in questo caso torno da voi per la modifica
grazie infinite
Private Sub CommandButton11_Click() Dim dest As String Dim emailApp As Object Dim newEmail As Variant Dim ws As Worksheet Dim s As String Set ws = ThisWorkbook.Worksheets("anagrafica") s = ComboBox1.Value If s = "" Then Exit Sub Select Case ComboBox1.Value Case "proprietà" dest = Range("u3") 'cella in cui ci sono tutti gli indirizzi sepoarati da ; specifici per "proprietà" Case "leasing1" dest = Range("u4") 'cella in cui ci sono tutti gli indirizzi sepoarati da ; specifici per "leasing1" Case "leasing2" dest = Range("u5") 'cella in cui ci sono tutti gli indirizzi sepoarati da ; specifici per "leasing2" End Select Set emailApp = CreateObject("Outlook.Application") 'apre outlook With emailApp.CreateItem(newEmail) 'crea mail .To = dest '<---indirizzo di spedizione preso dal foglio anagrafica con l'istruzione sopra .Subject = "test denuncia..........." '<---Oggetto del messaggio .Body = "buongiorno............." '<---Corpo mail '.Attachments.Add "Allegato" '<--Indicare il percoso + nome allegato completo di estensione .Display '<---mostra l'applicativo Outlook pronto per la spedione della email '.Send '<--decommentare (e commentare .Display) per spedizione mail immediata End With Set emailApp = Nothing End SubSet ws = ThisWorkbook.Worksheets("anagrafica")
Iovedo dichiarata la variabile ws che punta a un foglio, ma nel codice poi non viene usato. Immagino che si riferisca ai Range che stanno dentro il Select: allora ci sono due alternative.
1) non dichiari ws come oggetto Sheet ma semplicemente attivi il foglio Anagrafica (quindi i Range successivi punteranno senza errori alle celle di questo foglio);
oppure
2) ti tieni l'oggetto ws ma allora devi qualificare tutti i successivi Range perchè puntino a questo oggetto foglio: ws.Range(...)I più pinoli poi ti diranno che non annienti tale variabile all'uscita dalla Sub... io penso che sia ininfluente ma normalmente quando si istanzia un oggetto poi bisogna distruggerlo con Nothing (questo è perentorio se l'oggetto non è proprio dell'applicazione: del resto l'hai fatto, giustamente, con emailApp).
With emailApp.CreateItem(newEmail) 'crea mail
Cos'è e da dove viene "newEmail" ?
Lo scheletro base è
Set myOlApp = CreateObject("Outlook.Application") Set myItem = myOlApp.CreateItem(olMailItem) myItem.Displaydove olMailItem vale zero (è una costante di Outlook ma Excel non la conosce. Settare newEmail a variant lo inizializza a Empty, non a zero, se ti funziona è uno dei misteri di Excel
)se ti funziona è uno dei misteri di Excel
Mi autobastono, ecco la risposta...
The value Empty denotes a Variant variable that hasn't been initialized (assigned an initial value). A Variant containing Empty is 0 if it is used in a numeric context, and a zero-length string ("") if it is used in a string context.
Poichè CreateItem si aspetta un numero, la tua newEmail è settata a zero, che è casualmente il valore dell'oggetto MailItem. Un colpo di fortuna, ma non sempre è così, quindi stiamo attenti
eliminato Dim ws as whorksheet
modificato set ws....... con worksheet"....". activate
corretto?
funziona
grazie
Poichè CreateItem si aspetta un numero, la tua newEmail è settata a zero, che è casualmente il valore dell'oggetto MailItem. Un colpo di fortuna, ma non sempre è così, quindi stiamo attenti
ahahah la fortuna aiuta gli audaci o meglio gli ignoranti come me!!
comunque copiato dal primo post di Alex nell'altra discussione che mi ha indicato di guardare nella prima risposta a questa discussione
devo correggere qualcosa per renderlo più corretto nella sintassi? o lascio tutto così?
magari lo legge qualcun altro e può tornare utile la correzione?
devo correggere qualcosa per renderlo più corretto nella sintassi?
Puoi agire in molti modi:
1) rendere NewEmail una costante locale alla tua routine e associarle il valore zero.Private Sub CommandButton11_Click() Dim dest As String Dim emailApp As Object Dim newEmail As Variant Dim ws As Worksheet Dim s As String Const NewEmail As Integer = 02) rendere newEmail una variabile di tipo numerico intero e impostarla a zero in avvio (anche se è superfluo):
Private Sub CommandButton11_Click() Dim dest As String Dim emailApp As Object Dim newEmail As Variant Dim ws As Worksheet Dim s As String Dim NewEmail As Integer NewEmail = 0 'superfluo. Quando è dimensionata, una variabile Integer diventa comuque zero3) eliminare del tutto newEmail e utilizzare zero come parametro di Createitem:
With emailApp.CreateItem(0) 'crea un nuovo elemento di tipo "mail"ok
credo soluzione più snella in questo caso la terza
grazie
buonasera! solo per farvi sapere e dare soddisfazione che il file è stato dato ai colleghi per il test e poi l'impiego. Mi sembra giusto condividere con voi i complimenti e i ringraziamenti!!!
ma per non perdere l'abitudine faccio una domanda
ho provato a caricare il file per la condivisione in sharepoint a cui accedono i vari colleghi dai loro pc e purtroppo i moduli vba non sono supportati dall'app excel in rete. Quindi abbiamo optato perla condivisione di una cartella che lo contiene su un pc server a cui tutti hanno accesso
ora mi chiedevo se costruire una pagina web che si comporti esattamente come la userform di inserimento dati, che abbia le stesse regole di messaggistica e archivio riprodotti con il codice del fiel excel sia secondo voi una vetta troppo alta per me.
ho già visto e usato una cosa del genere che con una maschera in pagina web generava poi dei report in foglio excel
grazie ancora per il supporto che mi avete dato
un saluto
-
AutoreArticoli
