Invio massivo conal...
 
Notifiche
Cancella tutti

La consultazione del forum è libera per tutti.

Per poter porre un quesito è invece necessario essere un utente registrato (clicca qui se non lo sei).

Tutti gli utenti che richiedono un supporto, come da REGOLAMENTO, sono caldamente invitati ad allegare un file di esempio con l'indicazione di quello che si desidera ottenere.

Invio massivo conallegati

5 Post
2 Utenti
0 Reactions
116 Visualizzazioni
Forum 1
(@fullavia)
Post: 3
Active Member
Avviatore di Topic
 

Salve a tutti

sto utilizzando la seguente macro per inviare mail massive con outlook avendo come file di dati un foglio excel
Il problema che dopo 10 invii automatici la macro mi restituisce il seguente errore:

Errore di run-time '-2147467259 (80004005)':
Errore di automazione
Errore non specificato.

La macro è la seguente::

Sub StampaUnioneConAllegati()

Dim OutApp As Object
Dim OutMail As Object
Dim ws As Worksheet
Dim lastRow As Long
Dim i As Long
Dim FileAllegato As String
Dim CartellaAllegati As String

' Imposta il foglio di lavoro e l'ultima riga dei dati
Set ws = ThisWorkbook.Sheets("TestInvioComunicazione")

lastRow = ws.Cells(Rows.Count, "A").End(xlUp).Row

' Crea una nuova istanza di Outlook
Set OutApp = CreateObject("Outlook.Application")

' Percorso della cartella contenente gli allegati
CartellaAllegati = "C:\Documenti\Cooplat\Invio Massivo\FileRinominati\"

' Loop attraverso ogni riga del foglio di lavoro
For i = 2 To lastRow ' Assumendo che la riga 1 contenga le intestazioni

' Recupera i dati della riga corrente
Dim NomeDestinatario As String
Dim EmailDestinatario As String
Dim NomeFile As String

NomeDestinatario = ws.Cells(i, 1).Value
EmailDestinatario = ws.Cells(i, 2).Value
NomeFile = ws.Cells(i, 3).Value

' Crea un nuovo messaggio di posta elettronica
Set OutMail = OutApp.CreateItem(0) ' 0 rappresenta olMailItem

With OutMail
.To = EmailDestinatario
.Subject = "Ricalcolo lavoro svolto nel periodo decorrente dal 07/2024 al 01/2025"
.Body = "La preghiamo di prendere visione della comunicazione allegata." & vbCrLf & _
"Cordiali saluti.Cordiali saluti." & vbCrLf & _
"COOPLAT."

' Aggiungi l'allegato (nome del file più percorso)
FileAllegato = CartellaAllegati & NomeFile
If Dir(FileAllegato) <> "" Then
.Attachments.Add FileAllegato
Else
MsgBox "File non trovato: " & FileAllegato
End If

' Visualizza o invia direttamente l'email
'.Display() ' Per controllare l'email prima di inviarla
.Send ' Per inviare l'email direttamente

End With

' Rilascia l'oggetto email
Set OutMail = Nothing
Next i

' Chiudi Outlook
Set OutApp = Nothing

MsgBox "Processo completato - " & (i - 2) & " mail inviate"

End Sub

Ringrazio per qualunque suggerimento possiate darmi

Versione di Excel
Sistema operativo
 
Postato : 30/11/2025 12:33
Alexps81
(@alexps81)
Post: 41
Eminent Member
 

Ciao, prova ad aggiungere 1 secondo di attesa dopo aver spedito la mail precedente. Alla fine del ciclo For/Next, subito prima dell'indice i aggiungi:

DoEvents
Application.Wait Now + TimeValue("0:00:01") '<--1 secondo
 
Postato : 30/11/2025 18:08
Forum 1
(@fullavia)
Post: 3
Active Member
Avviatore di Topic
 

 

 

Fatto, ma continua a darmi lo stesso errore quando eseguo l'istruzione .Send

Grazie comunque

 
Postato : 01/12/2025 10:23
Alexps81
(@alexps81)
Post: 41
Eminent Member
 

Proviamo a fare un tentativo con queste modifiche. In pratica è stato aggiunto un controllo sull'istanza "Outlook". Se già c'è Outlook aperto allora lascia quell'istanza altrimenti ne crea una nuova. Poi è stato aggiunto un ciclo esterno che prova fino a 3 volte di spedite la mail processata. Se non riesce allora mostra il messaggio di errore. Tra un tentativo e l'altro c'è un'attesa di 2 secondi. C'è un'ulteriore attesa di 1 secondo tra una mail e quella successiva.

Option Explicit

Sub StampaUnioneConAllegati()
    Dim OutApp As Object
    Dim OutMail As Object
    Dim ws As Worksheet
    Dim lastRow As Long
    Dim i As Long
    Dim FileAllegato As String
    Dim CartellaAllegati As String
    Dim Tentativi As Integer
    Dim MaxTentativi As Integer

    ' Imposta il foglio di lavoro e l'ultima riga dei dati
    Set ws = ThisWorkbook.Sheets("TestInvioComunicazione")
    
    lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row
    
    ' Percorso della cartella contenente gli allegati
    CartellaAllegati = "C:\Documenti\Cooplat\Invio Massivo\FileRinominati\"

    On Error Resume Next
    Set OutApp = GetObject(, "Outlook.Application")
    On Error GoTo 0
    If OutApp Is Nothing Then
        Set OutApp = CreateObject("Outlook.Application")
    End If

    MaxTentativi = 3

    ' Loop attraverso ogni riga del foglio di lavoro
    For i = 2 To lastRow

        Dim EmailDestinatario As String
        Dim NomeFile As String

        EmailDestinatario = ws.Cells(i, 2).Value
        NomeFile = ws.Cells(i, 3).Value
        FileAllegato = CartellaAllegati & NomeFile

        Tentativi = 0
        Do While Tentativi < MaxTentativi
            On Error Resume Next
            ' Crea un nuovo messaggio di posta elettronica
            Set OutMail = OutApp.CreateItem(0)

            With OutMail
                .To = EmailDestinatario
                .Subject = "Ricalcolo lavoro svolto nel periodo decorrente dal 07/2024 al 01/2025"
                .Body = "La preghiamo di prendere visione della comunicazione allegata." & vbCrLf & _
                        "Cordiali saluti." & vbCrLf & "COOPLAT."

                If Dir(FileAllegato) <> "" Then
                    .Attachments.Add FileAllegato
                Else
                    MsgBox "File non trovato: " & FileAllegato
                End If
                
                ' Visualizza o invia direttamente l'email
                '.Display() ' Per controllare l'email prima di inviarla
                .Send
            End With

            Set OutMail = Nothing
            DoEvents

            If Err.Number = 0 Then Exit Do

            Tentativi = Tentativi + 1
            Application.Wait Now + TimeValue("0:00:02")
            Err.Clear
        Loop

        If Tentativi = MaxTentativi Then
            MsgBox "Impossibile inviare email a: " & EmailDestinatario, vbCritical
        End If

        Application.Wait Now + TimeValue("0:00:01")

    Next i

    Set OutApp = Nothing

    MsgBox "Processo completato - " & (i - 2) & " mail inviate"
End Sub
 
Postato : 01/12/2025 15:23
Forum 1
(@fullavia)
Post: 3
Active Member
Avviatore di Topic
 

Perfetto, ora funziona grazie mille 👍 

 
Postato : 02/12/2025 09:37
Condividi:
My Agile Privacy
Questo sito utilizza cookie tecnici e di profilazione. Cliccando su accetta si autorizzano tutti i cookie di profilazione. Cliccando su rifiuta o la X si rifiutano tutti i cookie di profilazione. Cliccando su personalizza è possibile selezionare quali cookie di profilazione attivare.
Attenzione: alcune funzionalità di questa pagina potrebbero essere bloccate a seguito delle tue scelte privacy