Valutazione 4.87/ 5 (100.00%) 5838 voti

Condividi:        

Attivazione macro a scadenza

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

Attivazione macro a scadenza

Postdi darthwalter » 02/11/17 10:40

Buongiorno, sono nuovissimo del forum e la mia conoscenza di office/macro/istruzioni è 0, pochissime basi di comandi tipo IF/THEN.....insomma: un COPIA/INCOLLA incallito e speranzoso di far funzionare le cose.
Detto questo vi pongo il dilemma:
ho un semplice file excel di 4 colonne, la prima di testo, la seconda e la terza in formato data (gg/mm/aaaa) la quarta testo ma serve per le note che ci metto io.
Nella prima RIGA appare la data con la funzione OGGI; nella seconda riga le intestazioni delle 4 colonne; dalla terza riga in poi le cose che dovranno cambiare (le scadenze di vari oggetti che mi riguardano lavorativamente)
Le celle della colonna da C3 a C18 varieranno di colore in base al fatto che quando c'è la data (che inserisco io manualmente) che è minore di 25 giorni rispetto ad OGGI diventa GIALLA, se scaduta ROSSA, altrimenti nessun colore.
Adesso: volevo (e forse ci sono riuscito perchè non mi restituisce nessun errore ma non ho inserito valori GIUSTI di email e password) far mandare una email quando la scadenza che mi interessa è in fase GIALLA in una di quelle celle (C3:C18). Girando su internet ho trovato i vari comandi da scrivere nella macro di invio email....quello che mi manca è: scatenare la macro creata quando la casella diventa gialla (o comunque quando mancano 25 giorni alla scadenza in quelle celle.....25 giorni perchè dovrebbe essere il tempo necessario ad organizzare quella scadenza N.D.R.)
Spero di essere stato abbastanza esaustivo. Grazie per la disponibilità.
darthwalter
Newbie
 
Post: 9
Iscritto il: 02/11/17 10:21

Sponsor
 

Re: Attivazione macro a scadenza

Postdi alfrimpa » 02/11/17 10:48

Ciao darthwalter

Allega un file di esempio (strutturalmente uguale al tuo originale) con i dati (non sensibili) spiegando su questo quello che vuoi fare.
Alfredo

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

Re: Attivazione macro a scadenza

Postdi darthwalter » 02/11/17 13:16

ok....come si mette un allegato qui? :(
darthwalter
Newbie
 
Post: 9
Iscritto il: 02/11/17 10:21

Re: Attivazione macro a scadenza

Postdi alfrimpa » 02/11/17 13:42

Caricando il file su un sito di file sharing tipo filedropper o dropbox ed incollando qui il link che restituisce il sito

Guarda qui

viewtopic.php?f=26&t=103893
Alfredo

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

Re: Attivazione macro a scadenza

Postdi Anthony47 » 02/11/17 23:46

Ciao darthwalter, benvenuto nel forum.
Personalmente, prima di esaminare il tuo file, ti chiederei di verificare quanto fatto 10 giorni fa con l'utente wilson737; vedi qui:
viewtopic.php?f=26&t=105254#p639605

La macro proposta controlla quali sono le scadenze sulle varie righe, e se i giorni mancanti sono inferiori a una soglia programmata viene inviata una email; dopo N giorni (se la scadenza e' sempre prossima) viene reinviata altra email.

Il controllo sulle scadenze viene effettuato tutte le volte che il file viene aperto.

Vedi se riesci a usarla per il tuo obiettivo; se No (ma mi piacerebbe che ci provassi, eh?) allora invia il tuo file, con la reale struttura dei dati, e vedremo come fare.

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: 14835
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Attivazione macro a scadenza

Postdi darthwalter » 03/11/17 09:00

Ci provo, intanto però ti metto il codice che ho trovato su internet SOLO per inviare le email (senza niente che lo scateni). Vorrei usare questo perchè usa GMAIL e non Outlook...ma ufficialmente non l'ho ancora testato...poi se pensi sia corretta come macro provo ad integrarlo con la macro che mi hai suggerito in quel topic.

Codice: Seleziona tutto
Sub send_email_viaGmail()
Dim myMail As CDO.Message

Set myMail = New CDO.Message

myMail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpusessl") = True

myMail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = 1

myMail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "smtp.gmail.com"

myMail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25

myMail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2

myMail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendusername") = "darthwalter73@gmail.com"

myMail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendpassword") = "password"

myMail.Configuration.Fields.Update

With myMail
.Subject = "Test Email "
.From = "darthwalter73@gmail.com"
.To = "darthwalter73@gmail.com"
.CC = “”
.BCC = “”
.TextBody = "Good morning!"
.AddAttachment “”
End With
On Error Resume Next
myMail.Send
'MsgBox ("Mail has been sent")
Set myMail = Nothing

End Sub
darthwalter
Newbie
 
Post: 9
Iscritto il: 02/11/17 10:21

Re: Attivazione macro a scadenza

Postdi darthwalter » 03/11/17 09:39

Allora: dal codice dell'altro post ho estrapolato quello che penso mi serva e l'ho modificato in questo modo

Codice: Seleziona tutto
Sub Invioemail55()
'Dichiarazioni iniziali:
Dim OutApp As Object, OutMail As Object
Dim EmailAddr As String, Subj As String, DataCol As String, Franc As Long
Dim BDT As String, Nominat As String, mCnt As Long, myScad As Long
'  (a)
DataCol = "F"                           '<<< Una colonna libera, sara' usata per scriverci la data di sollecito
myScad = 28                             '<<< L'anticipo con cui inviare il sollecito
Franc = 7                              '<<< Il periodo tra un sollecito e il successivo, in giorni

''  (b)
For c = 3 To Cells(Rows.Count, 1).End(xlUp).Row
    If Cells("c3:c18") - Int(Now) < myScad And (Int(Now) - Cells(i, DataCol)) > Franc Then Call send_email_viaGmail
       
       
    End If
Next i
'
''  (d)
Set OutApp = Nothing
'
Application.Wait (Now + TimeValue("0:00:01"))
If mCnt > 0 Then
    MsgBox ("Inviate N. " & mCnt & " mail per prossima scadenza")
Else
    MsgBox ("Nessuna scadenza da sollecitare")
End If
'
End Sub


il "for c=3 to cells....etc." l'ho interpretato come il riferimento alle colonne che mi interessano con la data delle mie scadenze
l'istruzione "IF / THEN" l'ho riadattata sempre interpretandola come ciò che serve a me.
Comunque...provo a lanciare il codice e mi dice: "errore.....end if senza blocco if".....ma l'IF c'è.... :(

ah, ho modificato anche "Cells (i,DataCol) con "Cells (c,DataCol)....ma vado per tentativi PENSANDO di capire i comandi che sto interpretando in base alle mie (scarne) conoscenze.
darthwalter
Newbie
 
Post: 9
Iscritto il: 02/11/17 10:21

Re: Attivazione macro a scadenza

Postdi Anthony47 » 03/11/17 11:53

La Sub send_email_viaGmail usa CDOSys, uno strumento integrato nel SO, in grado di inviare email utilizzando le tue credenziali gmail; non credo le troverai in gmail tra le email inviate. In questo senso e' uno strumento "pericoloso" perche' puo' inviare email senza lasciarne traccia, di cui scoraggio sempre l'utilizzo; quindi non ti aiutero' piu' di tanto a usarlo.

Cio' detto, prima di ripulire un paio di errori nella tua riscrittura della macro, dovrei capire se tu devi inviare una email per ogni riga in scadenza (magari a indirizzi diversi) o se ti basta una email complessiva; inoltre il testo della mail e' standard o da personalizzare?

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: 14835
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Attivazione macro a scadenza

Postdi darthwalter » 03/11/17 13:30

ciao, da c3 a c18 compariranno scadenze differenti per motivi differenti, all'avvicinarsi della scadenza (dovrei aver settato 28 giorni da quello che ho recepito) deve partire una email indirizzata a me che mi avvisa...semplicemente questo....almeno credo semplicemente.
Per l'invio con gmail pensavo fosse una procedura nemmeno tanto rischiosa, sto inviando a me stesso una email di me stesso solo come promemoria, però se pensi non sia fattibile proverò con outlook.
Il testo della email è standard ("scadenza in avvicinamento")....praticamente quello che vorrei fare è usare il mio file scadenziario invece di mettere un promemoria su google calendar per ognuna delle scadenze che varia da 6 mesi a 2 anni.
Sempre grazie.
darthwalter
Newbie
 
Post: 9
Iscritto il: 02/11/17 10:21

Re: Attivazione macro a scadenza

Postdi Anthony47 » 04/11/17 15:10

Non e' la tua macro pericolosa, ma quello che CDOSys consente di fare: inviare una mail, magari con qualche file allegato, senza lasciare traccia. Per questo io evito di suggerire come usarlo, cosi' do' per scontato che chi lo fa capisce e padroneggia lo strumento.

Allora... ho capito che ti basta ricevere la notifica che devi guardare l'elenco perche' ci sono delle scadenze; quindi facciamo inviare una sola email.
Assumo che in colonna C ci sia la data di scadenza; assumo anche che la colonna F sia libera e si possa usare per scriverci la data di invio mail.
Il codice per questo dovrebbe essere:
Codice: Seleziona tutto
Sub Invioemail56()
Dim BDT As String, I As Long, mCnt As Long, myScad As Long, DataCol As String, Franc As Long
'
DataCol = "F"                           '<<< Una colonna libera, sara' usata per scriverci la data di sollecito
myScad = 28                             '<<< L'anticipo con cui inviare il sollecito
Franc = 7                               '<<< Il periodo tra un sollecito e il successivo, in giorni
For I = 3 To Cells(Rows.Count, 1).End(xlUp).Row
    If Cells(1, "C") - Int(Now) < myScad And (Int(Now) - Cells(I, DataCol)) > Franc Then
        BDT = BDT & I & " - " & Cells(I, "A") & " - Scade tra (gg): " & (Cells(1, "C") - Int(Now)) & vbCrLf
        mCnt = mCnt + 1
    End If
Next I
If mCnt > 0 Then
    'MsgBox ("Ci sono n. " & mCnt & " scadenze da esaminare"          '???
    Call send_email_viaGmail
Else
    MsgBox ("Nessuna scadenza da sollecitare")
End If
'
End Sub

Avrai notato che compilo una variabile BDT che poi non uso... questo dovrebbe essere il testo della mail, e contiene il numero di riga, il contenuto di colonna A e l'anticipo rispetto alla scadenza; questo per ogni scadenza da segnalare.
Se vuoi usare questa informazione nell'invio della mail, allora modifica la tua send_email_viaGmail per renderla richiamabile.
Dovrai cioe' trasformarla in questo modo:
Codice: Seleziona tutto
Sub SUB_email_viaGmail(ByVal myTesto)   'MODIF
'altro codice
'altro codice
With myMail
'altro codice
    .TextBody = myTesto         'MODIF
'altro codice
End With
'altro codice
'altro codice
End Sub
Le aree modificate sono marcate MODIF

Poi ti bastera' sostituire la Call send_email_viaGmail con
Codice: Seleziona tutto
    Call SUB_email_viaGmail(BDT)

Ovviamente proverai questa variante dopo che l'invio col messaggio standard avra' gia' funzionato.

Rimane pero' una considerazione di fondo: questo meccanismo invia una mail tutte le volte che viene aperto il file se c'e' bisogno di richiamare l'attenzione su scadenze prossime; ma non basterebbe un MsgBox che dice la stessa cosa? Per questo basta togliere l'apostrofo a inizio della riga marcata "???"

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: 14835
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Attivazione macro a scadenza

Postdi darthwalter » 04/11/17 15:29

Ok, quanto all'inizio del post avevo scritto che le mie conoscenze sono 0...intendevo che sono....0!!!
Non ho notato che hai usato una variabile BDT (che non so cosa sia) che non usi, io non ho mai programmato in VBA difatti non conosco praticamente nessuno dei comandi che hai scritto...sono andato per tentativi ipotizzando a cosa servissero e difatti ho miseramente fallito.
Comunque si, devo semplicemente ricordarmi a guardare le scadenze avendo date più lunghe di....mezza giornata (limite per cui si resetta la mia memoria cerebrale :D )
Il file posso benissimo lasciarlo aperto o farlo aprire (programmando l'apertura con operazioni pianificate...credo) su un MINIPC che ho a casa sempre acceso e connesso ad internet.
Il MsgBox che dici sarebbe una sorta di POPUP che si apre se vede l'avvicinarsi della scadenza? In teoria per come ho fatto il file nemmeno avrei bisogno del MsgBox, perchè si colora di giallo la cella all'avvicinarsi della scadenza. Comunque il senso era tenere il file sempre aperto, o farlo aprire per 1 minuto ogni giorno.
darthwalter
Newbie
 
Post: 9
Iscritto il: 02/11/17 10:21

Re: Attivazione macro a scadenza

Postdi Anthony47 » 04/11/17 15:40

Ah ha, questa e' chiarezza!

Comunque ci provi, vero?

Se il tuo piano e' avere un pc col file che da scheduler di sistema si apre da solo una volta al giorno allora devi cancellare le righe con i MsgBox, perche' sono interattivi.

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: 14835
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Attivazione macro a scadenza

Postdi darthwalter » 07/11/17 16:06

A provare ci provo, ci mancherebbe.
Comunque: ho compilato (ahahah....compilato....CTRL+C / CTRL+V compilato... 8) ) la tua macro e ho provato a testarla; solo testando la macro (col tastino tipo play) funziona, viene spedita l'email richiamando la "mia" macro, se invece scrivo le date nelle celle, salvo, chiudo e riapro il file.....non viene spedito niente. Dove sbaglio?
darthwalter
Newbie
 
Post: 9
Iscritto il: 02/11/17 10:21

Re: Attivazione macro a scadenza

Postdi Anthony47 » 07/11/17 23:48

La mia macro contiene un "periodo franco", di N giorni in cui non viene rispedita la mail.
Questo e' governato dalle seguenti righe:
DataCol = "F"
Franc = 7

In pratica, quando una mail viene spedita viene segnata in colonna F che l'avviso e' stato inviato; per N giorni (vedi Franc) non sara' fatto un nuovo invio.

E' questo il tuo caso? (cioe' colonna F e' stata gia' compilata con una data?)

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: 14835
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Attivazione macro a scadenza

Postdi darthwalter » 10/11/17 18:34

Ciao, scusa il ritardo, in colonna F non ho nessuna data e comunque la data che dovrebbe apparire parte dalla prima data che metto io in colonna "C" giusto?
A parte il fatto di premere ALT+F11 e di creare i 2 moduli....non è che devo poi con qualche funzione particolare integrarli nel file? Mi è sorto il dubbio che io abbia semplicemente creato 2 moduli che sono li ma che non vengono utilizzati...è un dubbio eh!!!
Sempre grazie.
darthwalter
Newbie
 
Post: 9
Iscritto il: 02/11/17 10:21

Re: Attivazione macro a scadenza

Postdi Anthony47 » 11/11/17 00:54

I Moduli vba non hanno vita autonoma, ma rimangono integrati nel file Excel.

Mi accorgo pero' che non ho ripetuto una cosa detta nella discussione a cui ti avevo inizialmente rinviato:
Se vuoi fare il controllo e inviare le mail all'apertura del file, allora:
-identifica, nell'editor delle macro, nel frame Progetto-VBAProject la "scheda" Questa_cartella_di_lavoro e fai doppioclick
-inserisci questo codice nel frame vuoto di dx:
Codice: Seleziona tutto
    Private Sub Workbook_Open()
    Call Invioemail56
    End Sub

Ho gia' inserito nel codice il vero nome della tua macro da richiamare

E' questo che ti mancava?

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: 14835
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Attivazione macro a scadenza

Postdi darthwalter » 14/11/17 16:12

Buonasera, a quanto pare si, mancava proprio questo, ho seguito le ultime istruzioni e.....magia (o scienza....o semplice sapere TUO) ricevuta email di avviso all'apertura del file.
Comunque sulla colonna "F" non appare ancora nessuna data di riferimento di sollecito...ma immagino possa conviverci.
Riusciresti a farmi capire con quali comandi della macro che mi hai scritto (anche il BDT che avrei dovuto notare) gestisco ogni casella di ogni scadenza se mai volessi ricevere una mail per ogni scadenza diversa?
Non so se sono riuscito a farmi capire nella richiesta :(
darthwalter
Newbie
 
Post: 9
Iscritto il: 02/11/17 10:21

Re: Attivazione macro a scadenza

Postdi Anthony47 » 15/11/17 00:17

La data in colonna F non compare perche'... la macro attuale si e' scordata di scriverla. Volendo compilarla (per creare un ritardo minimo, pari a Franc, tra una mail di notifica e la successiva) allora sostituisci questa parte:
Codice: Seleziona tutto
For I = 3 To Cells(Rows.Count, 1).End(xlUp).Row
    If Cells(I, "C") - Int(Now) < myScad And (Int(Now) - Cells(I, DataCol)) > Franc Then
        BDT = BDT & I & " - " & Cells(I, "A") & " - Scade tra (gg): " & (Cells(1, "C") - Int(Now)) & vbCrLf
        mCnt = mCnt + 1
        Cells(I, DataCol) = Int(Now)
    End If
Next I

Se vuoi inviare una mail per ogni notifica allora devi mettere l'invio all'interno di questo stesso ciclo. Cioe', volendo usare anche BDT per indicare di quale scadenza si tratta:
Codice: Seleziona tutto
Sub Invioemail57()
Dim BDT As String, I As Long, mCnt As Long, myScad As Long, DataCol As String, Franc As Long
'
DataCol = "F"                           '<<< Una colonna libera, sara' usata per scriverci la data di sollecito
myScad = 28                             '<<< L'anticipo con cui inviare il sollecito
Franc = 7                               '<<< Il periodo tra un sollecito e il successivo, in giorni
For I = 3 To Cells(Rows.Count, 1).End(xlUp).Row
    If Cells(I, "C") - Int(Now) < myScad And (Int(Now) - Cells(I, DataCol)) > Franc Then
        BDT = I & " - " & Cells(I, "A") & " - Scade tra (gg): " & (Cells(1, "C") - Int(Now)) & vbCrLf
        mCnt = mCnt + 1
        Call send_email_viaGmail(BDT)
        Cells(I, DataCol) = Int(Now)
    End If
Next I
If mCnt > 0 Then
    'MsgBox ("Ci sono n. " & mCnt & " scadenze da esaminare"          '???
'    Call send_email_viaGmail
Else
    MsgBox ("Nessuna scadenza da sollecitare")
End If
'
End Sub

Ho riproposto il codice completo perche' varia leggermente la costruzione di BDT e per evidenziare che la Call send_email_viaGmail ovviamente va rimossa (l'apostrofo in testa equivale a trasformare l'istruzione in puro commento).
Come detto, nel BDT comparira' il numero di riga, il contenuto di colonna A, i giorni mancanti alla scadenza; se invece di colonna A vuoi usare un'altra colonna basta cambiare la parte BDT = I & " - " & Cells(I, "NomeColonna")

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: 14835
Iscritto il: 21/03/06 16:03
Località: Ivrea


Torna a Applicazioni Office Windows


Topic correlati a "Attivazione macro a scadenza":


Chi c’è in linea

Visitano il forum: sysuop33 e 25 ospiti