Risolto Mail automatiche in VBA

Amodluca

Nuovo utente
5 Dicembre 2019
17
1
2016
0
Salve ragazzi, vi scrivo perché sto cercando una soluzione per la modifica di una macro in VBA che invia delle mail automatiche. Il mio obiettivo è quello di far partire un tot di mail (circa 60)visualizzare la prima, inviarla manualmente, far partire quindi la seconda e così via. Attualmente faccio questo per mezzo di un msgbox che mi permette di non generare tutte le finestre a cascata che mi fanno crashare outlook. Ho già cercato l'istruzione .display(true) che trasforma la finestra in modale , ma con questa istruzione non visualizzo più la firma che a quanto pare è collegata all'istruzione .display
Sapreste aiutarmi?
 

Amodluca

Nuovo utente
5 Dicembre 2019
17
1
2016
0
Ciao ges,
gia' ho letto quasi tutto di questo argomento
non ho trovato nulla relativamente al mio problema specifico. La mia macro gia' funziona vorrei riuscire a mostrare la mail completa e con la firma lasciarla lì inviarla e una volta inviata far comparire la nuova. Tutto ciò senza il msgbox in cui chiedo di inserire una risposta in modo da bloccare la cascata di mail.
 

ges

Excel/VBA Expert
Amministratore
Expert
21 Giugno 2015
22.845
1.865
Como
2011MAC 2016WIN
519
Puoi scrivere qui il codice che usi? (Ricorda che va messo nei TAG, per come fare leggi gli "Avvisi dello Staff")
 

Amodluca

Nuovo utente
5 Dicembre 2019
17
1
2016
0
Visual Basic:
Sub Prova()
Dim V() As Variant
Dim numerorighe As Integer, i As Integer
Dim answer As String, Outmail As Object

numerorighe = Cells(Rows.Count, 1).End(xlUp).Row
ReDim V(1 To numerorighe)
For i = 1 To numerorighe
V(i) = Cells(i, 1)
Next i
For i = 1 To numerorighe
            Call mail(i, V, numerorighe)
            ProvaMail.Menu.Cells(i, 2) = Date
Next i
End Sub
Sub mail(ByVal i As Integer, V As Variant, ByVal numerorighe As Integer)
Dim a, da As String
Dim ogg As String
Dim cc As String
a = "indirizzo@...."
da = "indirizzo@...."
ogg = "richiesta documentazione"
Call Invia_mail(da, a, "", ogg, "", "", "", False, i, V, numerorighe)
End Sub
Sub Invia_mail(DAmail As String, ByVal Amail As String, CCNmail As String, _
    OggettoMAil As String, corpoMail As String, FileAllegato As String, Mod_Opt As String, _
 confermaLettura As Boolean, ByVal i As Integer, V As Variant, numerorighe As Integer)

    Dim OutApp As Object
    Dim Outmail As Object
    Dim BodyMail As String
    Dim Firma_Default As String

    'creo gli oggetti per la mail
    Set OutApp = CreateObject("Outlook.Application")
    OutApp.Session.Logon
    Set Outmail = OutApp.CreateItem(0)
    Outmail.SentOnBehalfOfName = DAmail
    'memorizza la Firma di default usata in OutLook
    'With Outmail
            '.From = Me.campo_da.Text   'invia dalla casella e-mail associata come default in Outlook del proprio PC
            '.SentOnBehalfOfName = DAmail   'invia dalla casella e-mail indicata nel form
            '.SendUsingAccount = Me.campo_da.Text
            '.Sender = Me.campo_da.Text
            '.SentOnBehalfOfName = DAmail 'Me.campo_da.Text     'invia dalla casella e-mail indicata nel form
        '.To = Amail
        '.BCC = CCNmail
        '.Subject = OggettoMAil
        '.ReadReceiptRequested = confermaLettura 'per richiedere la conferma di lettura"
        'BodyMail = "<html><head></head><body>"
        'BodyMail = corpoMail
        
      
              
            'If FileAllegato <> "" Then
            '.Attachments.Add FileAllegato 'questo comando allega un file alla mail (esempio: "C:\Users\fff.xlsm")
            'End If
        ' PER ULTIMO:
        'preparo/invio la mail
    With Outmail
        .To = Amail
        .BCC = CCNmail
        .Subject = OggettoMAil
        BodyMail = "Buongiorno," &  "<BR>"

        
'--------------------
'scrive la tabella nel testo della mail
          BodyMail = BodyMail & "<table width=" & """100%""" & " border=" & """1""" & ">"
          BodyMail = BodyMail & "<td align=" & """left""" & ">" _
                     & Menu.Cells(i, 1)
          BodyMail = BodyMail & "<td align=" & """left""" & ">"
          
'--------------------
         BodyMail = BodyMail + "</table>" & "<BR>" & "La tempestività nel dare corso a quanto richiesto, ci permetterà di sfruttare al meglio le operazioni per la gestione della liquidità della banca." & "<BR>" & "<BR>" & "Grazie per la collaborazione." & "<BR>" & "Cordiali saluti."
        .Display
        .HTMLbody = BodyMail & .HTMLbody
        '.Display (True)
        
        If Mod_Opt = "send" Or Mod_Opt = "Send" Then
            .Send                     'questo comando invia la mail
        ElseIf Mod_Opt = "display" Then
            .Display 'questo comando visualizza la mail
        End If
        
        
    End With
    
    
    Set Outmail = Nothing
    Set OutApp = Nothing
End Sub
 

Amodluca

Nuovo utente
5 Dicembre 2019
17
1
2016
0
Ciao ges,
purtroppo il problema non è analogo io la firma la riesco ad inserire , il mio problema è il gioco di .display e .display(true) vorrei (come ho spiegato) all'inizio che riuscissi a vedere la mail completa di firma , inviarla e poi che automaticamente con questa azione parta la seconda mail e così via. Ho provato a cercare questa cosa di rilevare l'azione dell'invio , poi ho riprovato con l'istruzione .display(true) che sembrava perfetta per il mio caso, ma poi utilizzandola si perde la firma
 

ges

Excel/VBA Expert
Amministratore
Expert
21 Giugno 2015
22.845
1.865
Como
2011MAC 2016WIN
519
E' strano che la firma sparisce, prova a prenderla direttamente dalla cartella di Windows.
Dovrebbe essere questa

myFirma = Environ("appdata") & "\Microsoft\Signatures\MiaEMail"

Altrimenti cercala nel tuo percorso
 

Amodluca

Nuovo utente
5 Dicembre 2019
17
1
2016
0
Capito. Non la trovo nelle cartelle di Windows è la mail associata all'istituto dove lavoro e salvata su Outlook.
Come gira la mia macro? E' strano diciamo che è come se il testo della mail sostituisse la firma cancellandola.Se puoi prova a far girare la mia macro così puoi vedere qual'è il punto
 

Amodluca

Nuovo utente
5 Dicembre 2019
17
1
2016
0
non c'è la possibilità che la macro attenda un evento cioè l'invio manuale per poi far partire la mail successiva?
 

Amodluca

Nuovo utente
5 Dicembre 2019
17
1
2016
0
Bene ? Te le genera a cascata o una alla volta? Dovrebbe generarle a cascata ed è quello che non voglio. Se inserisci l'istruzione display.(true) successiva che io ho messo come commento inizia a perdere la firma o a non far leggere il testo
 

Amodluca

Nuovo utente
5 Dicembre 2019
17
1
2016
0
Ragazzi grazie, ma io già lo faccio così se leggete il messaggio iniziale. Vorrei evitare di mettere il messaggio che mi obbliga a rispondere ogni volta . Vorrei che la mail successiva partisse dopo che la precedente è stata inviata.
 

Amodluca

Nuovo utente
5 Dicembre 2019
17
1
2016
0
Ciao ges, la mia macro genera a cascata tot mail. Però se ne devo inviare 60 , ad esempio, mi genera 60 pagine outlook insieme che poi io devo aprire e inviare , inoltre solo il generarle così tante mi fa bloccare outlook. Il mio scopo è quello di sapere se evitando msgbox che mi obbligano a tornare sull'excel e a rispondere alla domanda finta, si può far ripartire il ciclo dopo aver inviato la prima mail e così via, in modo da non farle generare tutte insieme ma una alla volta. Pensavo di essere riuscito con l'istruzione .display(true) e invece mi perde la firma.
 

Sostieni ForumExcel

Aiutaci a sostenere le spese e a mantenere online la community attraverso una libera donazione!