Valutazione 4.87/ 5 (100.00%) 5838 voti

Condividi:        

Programma scadenzario 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

Programma scadenzario excel

Postdi robydiesis » 30/07/14 10:23

Buon giorno,
Sono completamente digiuna di programmazione e ho bisogno di aiuto perchè non riesco a trovare il codice che fa al caso mio.
Ho un elenco di persone, a coppie, ognuna delle quali presenta un' email (email 1 nella colonna B e email 2 nella colonna D).
Nella colonna E ho una data che rappresenta la data in cui tale persona deve mandarmi un file
nella colonna F ho i giorni di anticipo in cui deve essere avvisata tale persona via email (3 giorni)
nella colonna G ho il messaggio " Devi mandarmi la mail tra tre giorni, quindi il (data della colonna E).
nella colonna H vorrei far comparire la data in cui la mail è stata inviata


Il problema principale lo ho nelle macro.
Ho creato un Form con tre bottoni: il primo con Invio mail, il secondo con Controlla file, e il terzo con esci.

Ho trovato questo codice su questo forum.
Codice: Seleziona tutto
Sub invia_email()

    MsgBox ("ACCEDI AD OUTLOOK PRIMA DI PROCEDERE") ' MESSAGGIO: APRI OUTLOOK
    oggi = Date
    ultimariga = Range("A65000").End(xlUp).Row      ' CALCOLA ULTIMA RIGA DELLA TABELLA
    For i = 2 To ultimariga
    If Range("G" & i) <> "" Then GoTo Salta         ' SALTA L'ELABORAZIONE SE E' GIA' SOLLECITATO
    deadline = Range("B" & i).Value - (30 * Range("C" & i).Value)  ' CALCOLA LA DATA DI RIFERIMENTO (30 giorni X mesi col. "C")
    If oggi < deadline Then GoTo Salta
    variabileEmailDelDestinatario = Range("A" & i).Value        ' DA QUI IN POI ESPORTA IN OUTLOOK
    allegato = Range("E" & i).Value
    If Dir(allegato) = "" Then GoTo ErroreUno                    ' CONTROLLA L'ESISTENZA DEL FILE ALLEGATO (sennò genera un errore)
    Set VarOggApplicazioneOutlook = CreateObject("Outlook.Application")
    Set VarOggMailInOutlook = VarOggApplicazioneOutlook.CreateItem(olMailItem)
    VarOggMailInOutlook.To = variabileEmailDelDestinatario
    VarOggMailInOutlook.Subject = "SCADUTO"
    VarOggMailInOutlook.Body = Range("D" & i).Value & " - " & allegato & " - " & Range("F" & i).Value
    VarOggMailInOutlook.Attachments.Add allegato
    VarOggMailInOutlook.Display                                 ' OPZIONE PREVIEW EMAIL (usa la riga sotto se vuoi inviare direttamente)
    ' VarOggMailInOutlook.Send                                  ' OPZIONE SPEDISCI DIRETTAMENTE
    Range("G" & i) = oggi                                           ' ANNOTA LA DATA DEL SOLLECITO SUL DATABASE nella colonna "G"
Salta:
    Next i
    GoTo Fine
ErroreUno:
    MsgBox ("Errore su Scaduto " & Range("A" & i).Value & " :allegato INESISTENTE")
    GoTo Salta
Fine:
End Sub


Quando premo sul primo bottone dovrebbe mandare una mail con il testo della colonna G ed E ai due indirizzi mail della riga corrispondente quando la data di oggi è minore della deadline.
Non riesco a far si che ci siano le due mail nell'invio, e mettendo anche una lista di mail di prova tutte con oggi<deadline, lo manda solo alla prima mail, quindi next i non funziona proprio. Premetto che questo codice mi funzionava solo per una mail quindi outlook mi si apriva ma non so come modificarlo a mio uso.
Ho gia configurato outlook con l'indirizzo mail che dovrebbe inviare le mail.

Secondo problema.
quando premo il secondo bottone vorrei mi si aprisse in file excel dove ho salvato i dati, il foglio 3 di tale foglio, per controllare che non vi siano persone sotto la scadenza a cui la mail non sia stata inviata. Mi potete aiutare?

Terzo problema, scontato per molti.
Tale macro l'ho aperta nel file excel da cui deve leggere i dati. Quale è il modo per salvare tale programma in modo tale da aprirlo staccato dal file e far si che lui legga i dati dal file excel e lavori?



So che ho chiesto la luna. Grazie mille per chi vorrà aiutarmi ;) ;) ;)
robydiesis
Newbie
 
Post: 3
Iscritto il: 30/07/14 10:04

Sponsor
 

Re: Programma scadenzario excel

Postdi robydiesis » 30/07/14 11:03

Ho modificato il codice ma mi dice sempre che manca un end sub

Codice: Seleziona tutto
Private Sub CommandButton1_Click()

Sub invia_email()

    MsgBox ("ACCEDI AD OUTLOOK PRIMA DI PROCEDERE") ' MESSAGGIO: APRI OUTLOOK
    oggi = Date
    ultimariga = Range("A65000").End(xlUp).Row      ' CALCOLA ULTIMA RIGA DELLA TABELLA
    For i = 2 To ultimariga
    If Range("H" & i) <> "" Then GoTo Salta         ' SALTA L'ELABORAZIONE SE E' GIA' SOLLECITATO
    deadline = Range("E" & i).Value - Range("F" & i).Value  ' CALCOLA LA DATA DI RIFERIMENTO
    If oggi < deadline Then GoTo Salta
    variabileEmailDelDestinatario = Range("B" & "D" & i).Value        ' DA QUI IN POI ESPORTA IN OUTLOOK
    Set VarOggApplicazioneOutlook = CreateObject("Outlook.Application")
    Set VarOggMailInOutlook = VarOggApplicazioneOutlook.CreateItem(olMailItem)
    VarOggMailInOutlook.To = variabileEmailDelDestinatario
    VarOggMailInOutlook.Subject = "Sbobinatura a breve"
    VarOggMailInOutlook.Body = Range("A" & i).Value & Range("I" & i).Value & Range("C" & i).Value & Range("G" & i).Value & Range("E" & i).Value 'MESSAGGIO EMAIL
    VarOggMailInOutlook.Display                                 ' OPZIONE PREVIEW EMAIL (usa la riga sotto se vuoi inviare direttamente)
    ' VarOggMailInOutlook.Send                                  ' OPZIONE SPEDISCI DIRETTAMENTE
    Range("G" & i) = oggi                                           ' ANNOTA LA DATA DEL SOLLECITO SUL DATABASE nella colonna "G"
Salta:
    Next i
    GoTo Fine

Fine:

End Sub

End Sub
robydiesis
Newbie
 
Post: 3
Iscritto il: 30/07/14 10:04

Re: Programma scadenzario excel

Postdi Anthony47 » 30/07/14 14:44

Ciao robydiesis, benvenuto nel forum.
La sintassi del secondo codice e' abbastanza "avventuroso"...
Nell' editor delle macro inserisci un "modulo standard" (Menu /Inserisci /Modulo); in questo modulo inserisci tutta la Sub invia_email (da Sub invia_email al primo End Sub); poi modifica il codice della CommandButton1_Click in
Codice: Seleziona tutto
Private Sub CommandButton1_Click()
   Call invia_email
End Sub

Per quanto riguarda l' invio della mail a due destinatari potresti modificare la riga
variabileEmailDelDestinatario = Range("A" & i).Value
in
variabileEmailDelDestinatario = Range("A" & i).Value & ", " & Range("D" & i).Value

Non ho capito se tutto il resto gia' funziona come vorresti.

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

Re: Programma scadenzario excel

Postdi robydiesis » 30/07/14 17:39

Alla fine l'ho modificato
Codice: Seleziona tutto
Private Sub CommandButton1_Click()

    MsgBox ("ACCEDI AD OUTLOOK PRIMA DI PROCEDERE") ' MESSAGGIO: APRI OUTLOOK
    oggi = Date
    ultimariga = Range("A65000").End(xlUp).Row      ' CALCOLA ULTIMA RIGA DELLA TABELLA
    For i = 2 To ultimariga
    If Range("H" & i) <> "" Then GoTo Salta         ' SALTA L'ELABORAZIONE SE E' GIA' SOLLECITATO
    deadline = Range("E" & i).Value - Range("F" & i).Value  ' CALCOLA LA DATA DI RIFERIMENTO
    If oggi < deadline Then GoTo Salta
   
'PRIMO INDIRIZZO
    variabileEmailDelDestinatario = Range("B" & i).Value  ' DA QUI IN POI ESPORTA IN OUTLOOK
    Set VarOggApplicazioneOutlook = CreateObject("Outlook.Application")
    Set VarOggMailInOutlook = VarOggApplicazioneOutlook.CreateItem(olMailItem)
    VarOggMailInOutlook.To = variabileEmailDelDestinatario
    VarOggMailInOutlook.Subject = "Sbobinatura a breve"
    'MESSAGGIO EMAIL                nome             virgola    acapo           testo                   spazio       data                punto       acapo
    VarOggMailInOutlook.Body = Range("A" & i).Value & Chr(44) & Chr(10) & "ricordati di sbobinare il" & Chr(32) & Range("E" & i).Value & Chr(46) & Chr(10) & "Buon lavoro! :)"
    VarOggMailInOutlook.Display                                 ' OPZIONE PREVIEW EMAIL (usa la riga sotto se vuoi inviare direttamente)
    ' VarOggMailInOutlook.Send                                  ' OPZIONE SPEDISCI DIRETTAMENTE
    Range("G" & i) = oggi                                           ' ANNOTA LA DATA DEL SOLLECITO SUL DATABASE nella colonna "G"

'SECONDO INDIRIZZO
    variabileEmailDelDestinatario = Range("D" & i).Value  ' DA QUI IN POI ESPORTA IN OUTLOOK
    Set VarOggApplicazioneOutlook = CreateObject("Outlook.Application")
    Set VarOggMailInOutlook = VarOggApplicazioneOutlook.CreateItem(olMailItem)
    VarOggMailInOutlook.To = variabileEmailDelDestinatario
    VarOggMailInOutlook.Subject = "Sbobinatura a breve"
    'MESSAGGIO EMAIL                nome             virgola    acapo           testo                   spazio       data                punto       acapo
    VarOggMailInOutlook.Body = Range("C" & i).Value & Chr(44) & Chr(10) & "ricordati di sbobinare il" & Chr(32) & Range("E" & i).Value & Chr(46) & Chr(10) & "Buon lavoro! :)"
    VarOggMailInOutlook.Display                                 ' OPZIONE PREVIEW EMAIL (usa la riga sotto se vuoi inviare direttamente)
    'VarOggMailInOutlook.Send                                  ' OPZIONE SPEDISCI DIRETTAMENTE
    Range("H" & i) = oggi

Salta:
    Next i
    GoTo Fine

Fine:



End Sub


e fa il suo dovere :D

Grazie per l'interessamento :D

Ora che ci sei ti chiedo altre cose ;)
-come si fa a mandare per mail a un elenco come allegato soltanto un foglio del documento excel su cui sto lavorando?
-in questo codice si fa riferimento a una pagina in particolare che è quella giusta. Ma come fa a decidere che è quella e non un altra?
-chiedo la luna se volessi che tale programma funzionasse avviandolo esterno a excel?

graaaazie
robydiesis
Newbie
 
Post: 3
Iscritto il: 30/07/14 10:04


Torna a Applicazioni Office Windows


Topic correlati a "Programma scadenzario excel":


Chi c’è in linea

Visitano il forum: Nessuno e 16 ospiti