Valutazione 4.87/ 5 (100.00%) 5838 voti

Condividi:        

Invio automatico email da 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

Re: Invio automatico email da excel

Postdi 4urelio » 22/10/15 11:49

Allora, cerco di spiegarmi meglio. La macro che hai creato fa partire una mail quando nella colonna F c'è scritto sollecitare, che è condizionato al passaggio di 30gg dalla data di riferimento. Oltre a quello ci sono altri 3 alert, indicati nella casella K, Primo sollecito>40gg, secondo sollecito >60gg, terzo sollecito >90gg. Per ognuna di queste condizioni dovrebbe partire una mail con un diverso testo, con naturalmente una cella di controllo per non inviare doppioni.
Grazie del tempo dedicatomi
4urelio
Newbie
 
Post: 7
Iscritto il: 19/10/15 08:40

Sponsor
 

Re: Invio automatico email da excel

Postdi bismark » 22/10/15 13:22

Ho capito l'esigenza

A parole penso si potrebbe gestire con l'inserimento di case ma in linguaggio vba non posso esserti d'aiuto perché è già una cosa per me di alta università


la tua richiesta sarebbe :
F M
1 case se sollecito e inserimento di avvisato??
F M
2 case se sollecito + avvisato + secondo sollecito = oggetto della mail K.value

3 case se sollecito + avvisato + terzo sollecito = oggetto della mail k. value

mi rimane ( tra i tanti) ancora un dubbio se la mail adesso si genera per effetto di sollecito1 nei prossimi 40 - 60 -90 giorni... quante volte parte la mail di sollecito ??

Forse mi sono perso qualcosa

Lascio il campo ai geni di VBA

a presto
bismark
Utente Junior
 
Post: 54
Iscritto il: 08/07/15 15:03

Re: Invio automatico email da excel

Postdi alfrimpa » 22/10/15 13:43

Ciao a tutti e ciao mb

Ma no non si tratta di alta università! :)

Mi permetto di intervenire solo per illustrare a mb l'utilizzo del costrutto Select Case che è molto semplice ed intuitivo

Codice: Seleziona tutto
Sub prova()
Dim var As String
Select Case var
    Case Is = "pippo"
    codice1
    Case Is = "pluto"
    codice2
    Case Is = "paperino"
    codice3
End Select
End Sub


In sostanza a seconda del valore che assume la variabile var viene eseguito il codice1, codice2 o codice3.

Spero sia d'aiuto.
Alfredo

Win7 + Office 2007
Avatar utente
alfrimpa
Utente Senior
 
Post: 840
Iscritto il: 30/12/13 17:01
Località: Napoli

Re: Invio automatico email da excel

Postdi bismark » 22/10/15 13:48

Grazie Alfredo
bismark
Utente Junior
 
Post: 54
Iscritto il: 08/07/15 15:03

Re: Invio automatico email da excel

Postdi bismark » 23/10/15 16:11

Mi spiace non poterti essere d'aiuto per 2 motivi

1 è legato al fatto che non saprei come impedire l'invio più volte della stessa mail

2 che è un pò più complicato e non so neppure da cosa sia causato ho riaperto il file dove avevo fatto le prove ( e per fortuna che ho postato la sub ) perchè mi si apree quando vado per lanciare l'elaborazione mi dice errore manca DDL ??

Non ti preoccupera per il tuo problema arriveranno sicuramente amici più preparati e ti troveranno la soluzione

ciao
bismark
Utente Junior
 
Post: 54
Iscritto il: 08/07/15 15:03

Re: Invio automatico email da excel

Postdi bismark » 26/10/15 17:57

Buona sera

faccio 2 premesse

1 continuo ad avere il dubbio " ma quando lancio la macro"??

se la lancio più volte nel mese mando più volte la stessa comunicazione al diretto interessato ???

quindi ??

2 mi piacerebbe per capire usare la funzione case ma non ne son venuto a capo

per concludere e semplificare ho modificato in modo che nell'oggetto della mail vada a prendere la descrizione del sollecito

Codice: Seleziona tutto
For Each cell In Range("f2:f" & ur)
            If cell.Value = "Sollecitare" And _
             Range("K" & cell.Row).Value <> "avvisato" Then
             Range("M" & cell.Row).Value = "avvisato"
              Subj = Range("K" & cell.Row).Value


risottolineo ne come procedura non mi piace molto

aspetto lumi dagli esperti e commenti da 4aurelio

Grazie

Buona serata
bismark
Utente Junior
 
Post: 54
Iscritto il: 08/07/15 15:03

Re: Invio automatico email da excel

Postdi 4urelio » 27/10/15 14:15

Eccomi!
Non ho ben capito i vari interventi, la macro la lancio ogni volta che apro il file.
Semplifichiamo il problema perche le esigenze sono cambiate. nella macro che avevi creato devo legare un altro if per l'invio di un altro tipo di sollecito quando nella colonna F appare un'altra condizione (lasciamo perdere la colonna K). Tutto questo naturalmente creando un'altra cella di controllo per non inviare eventuali doppioni. Come le lego?
4urelio
Newbie
 
Post: 7
Iscritto il: 19/10/15 08:40

Re: Invio automatico email da excel

Postdi bismark » 27/10/15 14:35

Per favore per poter capire meglio la nuova esigenza puoi postare un file senza dati sensibili e spiegare il risultato finale che vorresti ottenere

Grazie
bismark
Utente Junior
 
Post: 54
Iscritto il: 08/07/15 15:03

Re: Invio automatico email da excel

Postdi 4urelio » 27/10/15 19:04

Ecco il file:

https://www.dropbox.com/s/s6c7wnqcwgvpj ... .xlsm?dl=0

Prendendo in considerazione solo la colonna F, ho creato due alert, uno al passaggio di 20 gg(primo sollecito) e uno al passaggio di 30gg(secondo sollecito). Allo scattare prima di una e poi dell'altra condizione devo partire due email diverse, una sola volta l'una, quindi creando nella colonna M il controllo "Inviato primo sollecito" e nella colonna N "inviato secondo sollecito". Praticamente quello che già mi avevi fatto per una sola condizione adesso la devo fare per due, ma non riesco a legare le due cose. E' la prima volta che mi addentro nel mondo delle macro, quindi sono proprio "analfabeta".
Grazie e buona serata

Edit: La macro presente nel file e' quella che ho pubblicato nel mio messaggio successivo a questo (Anthony)
4urelio
Newbie
 
Post: 7
Iscritto il: 19/10/15 08:40

Re: Invio automatico email da excel

Postdi Anthony47 » 27/10/15 21:48

Ci sei andato vicino...
L'errore bloccante e' stato aver usato If cell.Value = "Secondo sollecito >30gg" mentre la scritta che hai adottato nel foglio e' "Secondo Sollecito >30gg" (il confronto con "=" e' case-sensitive).
Comunque mi permetto di modificare la macro in
Codice: Seleziona tutto
Sub InviaEmail()
Dim OutlookApp As Object
Dim MItem As Object
Dim cell As Range
Dim Subj As String
Dim EmailAddr As String
Dim Recipient As String '?? A Che serve?
Dim Bonus As String     '?? A Che serve?
Dim Msg As String, ToSend As Boolean
Dim miorange As Range   '?? A Che serve?
Dim flag As Range       '?? A Che serve?
Dim UR As Long, mCnt As Long
'
UR = Sheets("evasi").Range("a" & Rows.Count).End(xlUp).Row
Set miorange = Range("a1:a" & UR)         '?? A Che serve?
Set flag = Range("f1:f" & UR)             '?? A Che serve?
Set OutlookApp = CreateObject("Outlook.Application")
For Each cell In Range("f2:f" & UR)
    If InStr(1, cell.Value, "Primo Sollecito", vbTextCompare) > 0 And _
     Range("M" & cell.Row).Value <> "INVIATO PRIMO SOLLECITO PROFILO" And _
     InStr(1, Range("E" & cell.Row).Value, "@", vbTextCompare) > 0 Then
        Range("M" & cell.Row).Value = "INVIATO PRIMO SOLLECITO PROFILO"
        Subj = "Subject del primo Sollecito"
        ToSend = True
    ElseIf InStr(1, cell.Value, "Secondo Sollecito", vbTextCompare) > 0 And _
     Range("N" & cell.Row).Value <> "INVIATO SECONDO SOLLECITO PROFILO" And _
     InStr(1, Range("E" & cell.Row).Value, "@", vbTextCompare) > 0 Then
        Range("N" & cell.Row).Value = "INVIATO SECONDO SOLLECITO PROFILO"
        Subj = "Subject del Secondo sollecito"
        ToSend = True
    Else
        ToSend = False
    End If
'
If ToSend Then
        mCnt = mCnt + 1
        EmailAddr = Range("e" & cell.Row).Value
        Msg = "Buongiorno, si sollecita TESTO A PIACERE a proposito di " & Range("b" & cell.Row).Value & " " & Range("c" & cell.Row).Value & " ALTRO TESTO A PIACERE " & Range("d" & cell.Row).Value & " ALTRO TESTO A PIACERE " & vbCrLf & "Grazie e cordiali saluti"
        Set MItem = OutlookApp.CreateItem(0)
        With MItem
            .To = EmailAddr
            .Subject = Subj
            .Body = Msg
            .Display                                        '**1
            '.Send                                           '**2
            'Application.Wait (Now + TimeValue("0:00:02"))   '**2
        End With
    End If
  Next
  Set OutlookApp = Nothing
MsgBox ("Completato; inviate N° " & mCnt & " email")
End Sub

Le modifiche riguardano:
-in controllo che in colonna E ci sia presumibilmente un indirizzo mail
-l'accorpamento delle parti comuni in un unico blocco

Cosi' come e', la mail viene visualizzata e non spedita; devi procedere manualmente col comando Invia nella visualizzazione della mail.
Se hai una versione Outlook >2003 allora puoi "commentare la riga **1 (metti un apostrofo all'inizio) e "scommentare" le istruzioni **2 (togliere l'apostrofo iniziale), e in questo modo le mail saranno accodate per l'invio in Outlook, che avverra' secondo le modalita' impostate di Invia/Ricevi.
Se invece hai OL2003 o precedente (specifica quale versione) allora, se proprio ti interessa fare in modo che le mail partano automaticamente, possiamo fare una variante al codice.
Ho inserito la macro nel file che hai pubblicato.

Ciao
Anthony
Win7 + Office 2010 Ita; Win 7 + Office 2013 Ita
Xp + Office 2003 Ita
E voi cosa usate? (per istruzioni vedere viewtopic.php?f=26&t=97449)
Avatar utente
Anthony47
Moderatore
 
Post: 13892
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Invio automatico email da excel

Postdi bismark » 28/10/15 11:33

Complimenti 4aurelio e Grazie ad Anthony47

adesso vado a studiare le modifiche per capire la procedura di controllo se la mail è già stata spedita una volta e si vuole evitare di inviarla una seconda ??

Complimenti
bismark
Utente Junior
 
Post: 54
Iscritto il: 08/07/15 15:03

Re: Invio automatico email da excel

Postdi bismark » 28/10/15 12:06

Scusate 2 chiarimenti
1
mCnt cosa indica ??

ho visto che è indicato al momento della creazione della mail e poi nel messaggio finale
2

4aurelio parli fi colonna F in effetti quando abbiamo cominciato utilizzavamo quella colonna e nella sub si faceva rferimento

non vedo però nella parte nuova

For each cell..... nessun riferimento alla colonna F ??

GRazie
bismark
Utente Junior
 
Post: 54
Iscritto il: 08/07/15 15:03

Re: Invio automatico email da excel

Postdi Anthony47 » 28/10/15 13:05

mCnt conta quante mail sono state inviate.

Il loop principale della macro e' For Each cell In Range("f2:f" & UR) /Next

Ciao a tutti.
Anthony
Win7 + Office 2010 Ita; Win 7 + Office 2013 Ita
Xp + Office 2003 Ita
E voi cosa usate? (per istruzioni vedere viewtopic.php?f=26&t=97449)
Avatar utente
Anthony47
Moderatore
 
Post: 13892
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Invio automatico email da excel

Postdi bismark » 28/10/15 13:46

Rigrazie

p.s x anthony47 per "cultura mia" e in caso di select case come si potrebbe scrivere una sub come quella creata ??

premesso che sicuramente la soluzione proposta va bene ( oppure mi dici che non si può fare con selct case , e allora ne ho imparata un'altra :oops: :oops: :oops: )

:)
bismark
Utente Junior
 
Post: 54
Iscritto il: 08/07/15 15:03

Re: Invio automatico email da excel

Postdi Anthony47 » 29/10/15 00:49

L' istruzione Select Case "Esegue uno dei vari blocchi di istruzioni sulla base del valore di un’espressione"; espressione e' "Qualsiasi espressione numerica o espressione stringa"
Il virgolettato corsivo viene dall'help on line del vba.

L' If utilizzato invece usa tre condizioni per determinare cosa fare:
Codice: Seleziona tutto
InStr(1, cell.Value, "Primo Sollecito", vbTextCompare) > 0
Range("M" & cell.Row).Value <> "INVIATO PRIMO SOLLECITO PROFILO"
InStr(1, Range("E" & cell.Row).Value, "@", vbTextCompare) > 0
(L' ElseIf successivo usa condizioni simili)

Insomma viene difficile mappare tutto in una "espressione numerica o espressione stringa"; bisognerebbe cioe' prima usare una sequenza di If con le tre condizioni per calcolare una espressione e poi usare questa espressione all'interno di Select Case, cioe' un doppio giro.

Aggiungo infine un commento sempre dall'help on line del vba dell' Istruzione If...Then...Else:
"Suggerimento L’istruzione Select Case può risultare più utile per la valutazione di un'espressione singola che include diverse azioni possibili." Cioe' ribadisce l'idea di "singola espressione" ben usabile in una Select case.

Esempio scemo: preparare un messaggio articolato diversamente a seconda del ritardo di un pagamento; la cella G2 contiene il ritardo del pagamento dovuto.
Codice: Seleziona tutto
Select Case Range("G2").Value
    Case 1 To 5
        msg = "Il pagamento e' gia' scaduto..."
    Case 6 To 10
        msg = "E' passato gia' un bel po' di tempo dalla scadenza..."
    Case 10 To 15
        msg = "Mo ci stiamo stufando..."
    Case Is > 15
        msg = "Adesso e' troppo"
End Select

Ciao
Anthony
Win7 + Office 2010 Ita; Win 7 + Office 2013 Ita
Xp + Office 2003 Ita
E voi cosa usate? (per istruzioni vedere viewtopic.php?f=26&t=97449)
Avatar utente
Anthony47
Moderatore
 
Post: 13892
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Invio automatico email da excel

Postdi bismark » 29/10/15 12:40

Grazie anthony

e scusa se ti ho fatto fare le ore piccole......

alla prossima
bismark
Utente Junior
 
Post: 54
Iscritto il: 08/07/15 15:03

Precedente

Torna a Applicazioni Office Windows


Topic correlati a "Invio automatico email da excel":


Chi c’è in linea

Visitano il forum: wallace&gromit e 17 ospiti