Hai gia' i 300 file pdf? Per curiosita', li ha prodotti direttamente l' addin o l' addin ha prodotto documenti doc e con un altro processo hai ottenuto i pdf?
Dici che hai prodotto 300 file con nome file "cognome nome.pdf "; questo presuppone che non ci siano omonimi (lo confermi?; potrebbe essere spiacevole inviare a tutti i Rossi Mario lo stesso documento...), e il nome file sara' del tipo "rossimario.pdf".
La macro Invioemail (il link che ti ho inviato) consente di creare un "Testo della mail" standard con la personalizzazione del nome del ricevente (vedi variabile "BDT"); e' necessario fare piccoli adattamenti a quella macro e creare una macro a livello superiore per gestire l' invio a tutti gli utenti.
La macro a "livello superiore" da aggiungere puo' avere questo codice:
- Codice: Seleziona tutto
Sub Main()
Dim Iniz As String, myCol As Long, I As Long
'
Iniz = "B2" '<<** La cella col primo Cognome da esaminare
myCol = Range(Iniz).Column
For I = Range(Iniz).Row To Range(Iniz).Offset(5000, 0).End(xlUp).Row
[H1] = Cells(I, myCol + 3).Value
[I1] = Cells(I, myCol + 1).Value
[J1] = Cells(I, myCol).Value
Call Invioemail
Next I
End Sub
Essa usa le celle H1-I1-J1 per copiarvi email e nominativo di un utente dopo l' altro, prima di lanciare la Sub Invioemail, che quindi abbisognera' di poche modifiche.
QUESTA E' LA MACRO DA LANCIARE
La sub Invioemail modificata ha questo codice:
- Codice: Seleziona tutto
Sub Invioemail()
Dim OutApp As Object
Dim OutMail As Object
Dim EmailAddr As String
Dim Subj As String
Dim BodyText As String 'FIN QUI E' SONO "DICHIARAZIONI"
' (a)
Set OutApp = CreateObject("Outlook.Application")
''compilazione di un testo standard di accompagnamento 'LA VARIABIE BDT VIENE COMPILATA CON UN TESTO STANDARD
BDT = "Egregio sig " & [I1] & " " & [J1] '<<** J1 contiene il Cognome, I1 il nome
BDT = BDT & vbCrLf & "Le invio il documento etc etc"
BDT = BDT & vbCrLf & "etc etc"
BDT = BDT & vbCrLf & "Cordiali saluti"
BDT = BDT & vbCrLf & "Ufficio UCAS"
'' (b)
Nominat = [J1] & [I1] '<<** J1 contiene il Cognome, I1 il nome
OutFile = "C:\Users\UTENTE\Documents\PDF\" & Nominat & ".pdf" '<<** Modifica il percorso1
EmailAddr = Range("H1").Value 'INDIRIZZO EMAIL, PRESO DA h5 DEL FOGLIO CORRENTE
Subj = "Invio risultati questionario" ''<<** OGGETTO DELLA MAIL
'
Set OutMail = OutApp.CreateItem(0) 'DA QUI SI CREA E INVIA LA MAIL
With OutMail
.To = EmailAddr
.CC = ""
.BCC = ""
.Subject = Subj
.Attachments.Add OutFile
.Body = BDT
'Vedi testo per comportamenti diversi tra Versioni Outlook e OS: '****
.Display 'or use .send
'.send
End With
' (c)
Set OutMail = Nothing
'
' (d)
Set OutApp = Nothing
Application.Wait (Now + TimeValue("0:00:04"))
Application.SendKeys "%a"
Application.Wait (Now + TimeValue("0:00:04"))
'
End Sub
Purtroppo la macro Invioemail e' riferita alla versione Outlook 2003 su XP, mentre tu usi Outlook 2010; potrebbero esserci delle differenze anche legate al Sistema Operativo, di cui avevamo parlato in questo messaggio e successivi:
viewtopic.php?f=26&t=62073&start=120#p542854Le righe impattate sono quelle successive alla riga marcata ****
Le righe marcate <<** sono quelle che hanno bisogno di essere personalizzate (in ambedue le macro), perche' sono usate per comporre il Testo e Subject della mail, oltre che per impostare la Directory in cui si trovano i file "pdf", o comunque per impostare dei parametri di lavoro.
Ribadisco che e' un processo, quello che ti ho suggerito, molto disottimizzato perche' crea a annulla a ogni invio il processo di Outlook, che di suo richiede alcuni secondi. Ma io me la cavo con poco...
Ciao