excel modulo VBA aiuto



  • excel modulo VBA aiuto
    di Cesare (utente non iscritto) data: 22/04/2015 15:58:17

    Buon pomeriggio a tutti.
    Vi chiedo gentilmente un piccolo aiuto. Non riesco a sistemare in maniera funzionale questa macro. Ho urgenza di terminarla.

    Si tratta di una semplice macro con cui se il volore della cella L3 é uguale ad "ATTENZIONE" (messaggio che compare attraverso una Fx) invia automaticamente un'email ad indirizzo prova@abc.it. Il corpo dell'email sarebbe il testo riportato nella cella B2.

    Mi andrebbe anche un secondo caso. Ovvero che venisse inviata un'email nel caso in cui i valori di una lista di celle (da c8 a c20) dovesse cambiare o ripmpirsi con un valore.

    Ringrazio anticipatamente e di cuore chiunque voglia e possa aiutarmi.

    Cesare

     
    modulo:
    
    Sub Invio_Email()
    Dim myOutlook As Object
    Dim myMailItem As Object
    Dim variabileEmailDelDestinatario As String
    variabileEmailDelDestinatario = "prova@abc.it"
    Dim TestoEmail As String
    TestoEmail = [B2]
    'If [L3] <> "ATTENZIONE" Then Exit Sub
    Set otlApp = CreateObject("Outlook.Application")
    Set otlNewMail = otlApp.CreateItem(olMailItem)
    With otlNewMail
    .to = variabileEmailDelDestinatario
    .Subject = "MAGAZZINO"
    .body = "Avviso mancanza giacenza"
    .Display
    .send
    End With
    End Sub
    
    ---
    
    foglio:
    
    Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Address <> "L3" Then Exit Sub
    If UCase(Target) <> "ATTENZIONE" Then Exit Sub
    Invio_Email
    End Sub
    



  • di Albatros54 (utente non iscritto) data: 22/04/2015 17:21:30

    ho modificato il codice sull'evento change
    il resto non l'ho modificato
    prova , dobrebbe funzionare
    Ciao
    Albatros54

     
    Private Sub Worksheet_Change(ByVal Target As Range)
    If Intersect([l3], Target) Is Nothing Then Exit Sub
    If Target.Value = "attenzione" Then
     Call Invio_Email
    End If
    
    End Sub
    



  • di Cesare (utente non iscritto) data: 23/04/2015 09:37:48

    ho seguito le tue indicazioni e il modulo funziona correttamente. e per questo ti ringrazio davvero.

    c'è solo un piccolo problema: il modulo funziona se la parola "attenzione" la scrivo manualmente. mentre nel mio file excel la parola "attenzione" compare per mezzo di questa funzione =SE(I6<=300;"attenzione";"")

    esiste quindi un modo per ovviare a questo problema? ancora infinitamente grazie!

    Cesare



  • di lepat (utente non iscritto) data: 23/04/2015 09:45:28

    in tal caso devi lanciare la macro tramite un pulsante rinunciando all'automatismo



  • di alfrimpa data: 23/04/2015 10:44:55

    Ciao Lepat

    Giusto per discuterne un po' (ed imparare qualcosa di nuovo) ho provato, in merito al problema della discussione, a scrivere la sottostante macro ma non funziona.

    Sulla riga "If Not Intersect(Target, Range("B1")) Is Nothing Then" mi dà errore di run-time 424 "Necessario oggetto"

    Se invece tolgo il "If Not Intersect...." tutto funziona regolarmente ma ovviamente l'esecuzione del codice non è più limitata alla sola cella B1.

    Cosa ne pensi e dove credi che io sbagli?

    Grazie

    Alfredo
     
    Private Sub Worksheet_Calculate()
    If Not Intersect(Target, Range("b1")) Is Nothing Then
        If Range("b1").Value <> "" Then
            MsgBox "ciao"  <---- Da sostituire con il codice per l'invio mail
        End If
    End If
    End Sub
    






  • di alfrimpa data: 23/04/2015 12:23:01

    Pensandoci ho rinunciato all'istruzione If Not Intersect ed ho scritto cme si vede sotto.

    A me sembrerebbe che funzioni (ovviamente ho provato non con la sub Invio_Email ma con un semplice msgbox).

    Alfredo
     
    Private Sub Worksheet_Calculate()
        If Range("b1").Value = "" Then
            End
            Else
            Call Invio_Email
        End If
    End Sub






  • di Cesare (utente non iscritto) data: 23/04/2015 14:18:08

    Grazie ancora una volta Alfredo!
    giusto per CORETTEZZA e per non arrecarti ulteriore disturbo, volevo avvisarti che posterò la richiesta di un ulteriore aiuto sempre però riguardante la stessa macro.

    Buon pomeriggio.

    Cesare.



  • di Cesare (utente non iscritto) data: 23/04/2015 14:25:17

    chiedo scusa..ma era Albatros54 che volevo ringraziare per il suo aiuto!



  • di alfrimpa data: 23/04/2015 14:28:15

    Ciao Cesare

    Innanzitutto nessun disturbo; diversamente non scriverei sui forum (anzi la cosa mi diverte )

    La macro che ho proposto andrebbe comunque modificata in quanto, ritengo, che le celle contenenti la funzione SE() siano più d'una e, pertanto, occorrerebbe ciclarle per verificare che la condizione sia vera.

    Allora io (come tutto il forum) resto in attesa delle nuove domande.

    Alfredo





  • di Cesare (utente non iscritto) data: 23/04/2015 14:31:54

    Ti ringrazio Alfredo. gentilissimo. Ho appena scritto e aperto una nuova discussione.
    la mia intenzione era che lavorando sempre sulla stessa macro, vorrei sapere se sia possibile poter inviare un'email nel caso in cui i valori di una lista di celle (da c8 a c20) dovesse cambiare o riepmpirsi con un valore.




  • di alfrimpa data: 23/04/2015 14:39:59

    Ti ho appena risposto nell'altra discussione ma, credo, che la macro debba essere ulteriormente modificata.

    Alfredo





  • di scossa data: 23/04/2015 15:08:22

    cit. alfrimpa: "Sulla riga "If Not Intersect(Target, Range("B1")) Is Nothing Then" mi dà errore di run-time 424 "Necessario oggetto""

    Target è un argomento tipico di alcune routine di evento, ma non di Calculate (che non ha argomenti), quindi in quella routine Target non esiste.



    scossa's web site
    Se tu hai una mela, ed io ho una mela, e ce le scambiamo, allora tu ed io abbiamo sempre una mela per uno.
    Ma se tu hai un'idea, ed io ho un'idea, e ce le scambiamo, allora abbiamo entrambi due idee. (George Bernard Shaw)



  • di alfrimpa data: 23/04/2015 15:10:54

    Giusto Scossa, ci dovevo arrivare da solo.

    Grazie.

    Alfredo