Errore durante l'invio di e-mail automatizzata


1

Ho una cartella di lavoro condivisa che ha una colonna che utilizza un elenco di convalida dei dati. Se YESè selezionato, mi piacerebbe inviare un'e-mail a un determinato reparto per chiedere loro di consultare la cartella di lavoro.

Sono arrivato così lontano

Sub SendMail()
    If Range("G10:G250") = "YES" Then
            With CreateObject("Outlook.Application").createitem(0)
                .To = "p***.h***@****.com"
                .Subject = "Update from Facility Manager"
                .Body = "Hi Property Services, " & vbNewLine & vbNewLine & " Please follow the link to see update on Facilty Management Tracker"
                .Send
            End With
    End If
End Sub

ma continuo a ricevere un type mismatcherrore.

Risposte:


1

È importante, quando si chiedono errori, indicare dove si verifica esattamente l'errore. Posiziona un punto di interruzione nella grondaia del riquadro del codice all'inizio del codice e passa una riga al momento con F8.

Nel tuo codice si verifica l'errore "tipo non corrispondente" sulla riga

If Range("G10:G250") = "YES" Then

Un intervallo che comprende più di una cella non può avere un valore stringa. Non è chiaro se si intende attraversare tutte le celle nell'intervallo e inviare una e-mail se una o più celle indicano "SÌ". Il tuo codice modificato seguente cerca un "SÌ" nell'intervallo e, se trovato, imposta un valore booleano e smette di cercare ulteriormente. Quindi se il valore booleano è impostato, prepara e invia l'e-mail.

Private Sub SendMail()
    Dim cell As Range
    Dim y As Boolean

    'If Range("G10:G250").Value = "YES" Then
    y = False
    For Each cell In Range("G10:G250")
        If cell.Value = "YES" Then
            y = True
            Exit For
        End If
    Next

    If y Then
        With CreateObject("Outlook.Application").createitem(0)
            .To = "p***.h***@****.com"
            .Subject = "Update from Facility Manager"
            .Body = "Hi Property Services, " & vbNewLine & vbNewLine & " Please follow the link to see update on Facilty Management Tracker"
            .Send  'during debugging you can use .Display instead (to avoid filling someones mailbox)
        End With
    End If

End Sub

Ha funzionato, grazie Tom :) hai idea di come forzarlo a funzionare automaticamente? Fino ad ora funziona solo se apro il codice e lo forzo?
P Spero

@PHope automaticamente, ma attivato da cosa? Forse puoi usare l' Worksheet_Changeevento. Doc su MSDN Si verifica quando le celle del foglio di lavoro vengono modificate dall'utente o da un collegamento esterno . Qui su SuperUser ci sono centinaia di post su questo evento, basta inserirlo nella casella di ricerca.
Tom Brunberg,

Grazie per la risposta. Quindi, ho impostato la macro (con il tuo precedente aiuto), che funziona perfettamente ma devo forzare la corsa. Vorrei che inviasse l'e-mail se, una volta salvata, qualsiasi cella nella colonna G è stata cambiata in "SÌ"
P Spero che il

La tua domanda originale riguardava il type mismatch error, a cui ho già risposto. Ho anche risposto nei commenti, in termini generali, a una domanda aggiuntiva su come automatizzare il tuo compito e su come trovare ulteriori esempi. I siti di Stack Stack come SuperUser si basano sul principio di "una domanda - una risposta". Ti invitiamo a porre più domande come nuovi post, sono gratuiti! :) Per favore, dedica un po 'di tempo a leggere gli articoli nel centro assistenza, comprese le risposte di qualcuno
Tom Brunberg,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.