Sviluppare funzionalita su Microsoft Office con VBA aprire outllook con mail predisposta

Login Registrati
Stai vedendo 23 articoli - dal 1 a 23 (di 23 totali)
  • Autore
    Articoli
  • #45813 Score: 0 | Risposta

    gagen
    Partecipante

      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.
      #45815 Score: 0 | Risposta

      alexps81
      Moderatore
        58 pts

        Ciao,

        innanzitutto prova a dare uno sguardo a questa discussione e vedi se puoi trovare degli spunti utili

        Macro email

        #45819 Score: 0 | Risposta

        gagen
        Partecipante

          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

          #45820 Score: 0 | Risposta

          vecchio frac
          Senior Moderator
            272 pts

            gagen ha scritto:

            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?

            #45826 Score: 0 | Risposta

            gagen
            Partecipante

              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.
              #45839 Score: 0 | Risposta

              vecchio frac
              Senior Moderator
                272 pts

                gagen ha scritto:

                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   

                 

                #45841 Score: 0 | Risposta

                vecchio frac
                Senior Moderator
                  272 pts

                  gagen ha scritto:

                  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 Sub
                  

                   

                  #45849 Score: 0 | Risposta

                  alexps81
                  Moderatore
                    58 pts

                    Ciao 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?

                    gagen ha scritto:

                    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   ).

                    #45857 Score: 0 | Risposta

                    vecchio frac
                    Senior Moderator
                      272 pts

                      Il difficile è sempre mettere insieme pezzi diversi e mantenere la coerenza   

                      #45864 Score: 0 | Risposta

                      gagen

                        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!!

                         

                        #45869 Score: 0 | Risposta

                        alexps81
                        Moderatore
                          58 pts

                          gagen ha scritto:

                          spero di essere stato più chiaro

                          mmmhh....poco.

                           

                          gagen ha scritto:

                          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...

                          gagen ha scritto:

                          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?

                           

                          #45874 Score: 0 | Risposta

                          alexps81
                          Moderatore
                            58 pts

                            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.
                            #45886 Score: 0 | Risposta

                            gagen

                               

                              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!!

                              #45901 Score: 0 | Risposta

                              gagen
                              Partecipante

                                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 Sub
                                #45902 Score: 0 | Risposta

                                vecchio frac
                                Senior Moderator
                                  272 pts

                                  gagen ha scritto:

                                  Set 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).

                                  #45903 Score: 0 | Risposta

                                  vecchio frac
                                  Senior Moderator
                                    272 pts

                                    gagen ha scritto:

                                    With emailApp.CreateItem(newEmail) 'crea mail

                                    Cos'è e da dove viene "newEmail" ?

                                    #45904 Score: 0 | Risposta

                                    vecchio frac
                                    Senior Moderator
                                      272 pts

                                      Lo scheletro base è

                                      Set myOlApp = CreateObject("Outlook.Application")
                                      Set myItem = myOlApp.CreateItem(olMailItem)
                                      myItem.Display

                                      dove 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 )

                                      #45907 Score: 0 | Risposta

                                      vecchio frac
                                      Senior Moderator
                                        272 pts

                                        vecchio frac ha scritto:

                                        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   

                                        #45908 Score: 0 | Risposta

                                        gagen
                                        Partecipante

                                          eliminato Dim ws as whorksheet

                                          modificato set ws....... con worksheet"....". activate

                                          corretto?

                                          funziona

                                          grazie

                                          #45910 Score: 0 | Risposta

                                          gagen
                                          Partecipante

                                            vecchio frac ha scritto:

                                            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?

                                            #45914 Score: 0 | Risposta

                                            vecchio frac
                                            Senior Moderator
                                              272 pts

                                              gagen ha scritto:

                                              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 = 0

                                              2) 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 zero

                                              3) eliminare del tutto newEmail e utilizzare zero come parametro di Createitem:

                                              With emailApp.CreateItem(0)           'crea un nuovo elemento di tipo "mail"

                                               

                                              #45931 Score: 0 | Risposta

                                              gagen

                                                ok

                                                credo soluzione più snella in questo caso la terza

                                                 

                                                grazie

                                                 

                                                #46024 Score: 0 | Risposta

                                                gagen

                                                  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

                                                   

                                                Login Registrati
                                                Stai vedendo 23 articoli - dal 1 a 23 (di 23 totali)
                                                Rispondi a: aprire outllook con mail predisposta
                                                Gli allegati sono permessi solo ad utenti REGISTRATI
                                                Le tue informazioni: