- Codice: Seleziona tutto
Sub Invio_mail()
Dim OutApp As Object
Dim OutMail As Object
Dim EmailAddr As String
Dim Subj As String
Dim BodyText As String
Set OutApp = CreateObject("Outlook.Application")
Sheets("Attiva Macro").Select
StartPath = "C:\Miacartella\"
DestPath = "C:\Miacartella_utilizzati\"
For I = 2 To Cells(Rows.Count, "B").End(xlUp).Row 'Loop su tuttel le righe con i nomi
If Cells(I, "G") = 1 Then
' Nominat = Sheets("Foglio1").Cells(I, 2).Value '<<< La cella dove si trova il nome
' Cognominat = Sheets("Foglio1").Cells(I, 3).Value '<<< La cella dove si trova il cognome
' crea nome da cercare tra i pdf
StartPath = "C:\Miacartella\"
DestPath = "C:\Miacartella_utilizzati\"
NomeFile = Dir(StartPath & Cells(I, "B") & " " & Cells(I, "C") & " -*.pdf")
'OutFile = "C:\Miacartella\" & Nominat & " " & Cognominat & ".pdf" '<<< il modo in cui vorrei si chiamasse il file
'compilazione di un testo standard di accompagnamento
BDT = "Le invio il risultato del test."
BDT = BDT & vbCrLf & "Cordiali saluti" & vbCrLf
BDT = BDT & "kiuba"
If Len(NomeFile) > 0 Then
EmailAddr = Sheets("Attiva Macro").Cells(I, 4).Value '<<< La cella dove si trova l'indirizzo mail
Subj = "testo"
'
Set OutMail = OutApp.CreateItem(0)
With OutMail
.To = EmailAddr
.CC = ""
.BCC = ""
.Subject = Subj
.Body = BDT
.Attachments.Add "C:\Miacartella\" & NomeFile
.send
End With
Set OutMail = Nothing
'
Application.Wait (Now + TimeValue("0:00:01"))
'
'Sposta_copiando
'
'
Sheets("Inserimento dati").Select
Range("B" & I & ":AB" & I).Select
Selection.Copy
Sheets("Foglio2").Select
Range("B" & I & ":AB" & I).Select
ActiveSheet.Paste
Cells(I, "A").Value = NomeFile 'Registrazione in A del nome file inviato
Sheets("Inserimento dati").Select
Range("B" & I & ":AB" & I).Select
Application.CutCopyMode = False
Selection.ClearContents
Sheets("Attiva Macro").Select
' Sposta file allegato
Name StartPath & NomeFile As DestPath & NomeFile
End If
End If
Sheets("Attiva Macro").Select
Next I
'
' Riordina
'
'
Sheets("Inserimento dati").Select
Columns("P:P").Select
ActiveWorkbook.Worksheets("Inserimento dati").Sort.SortFields.Clear
ActiveWorkbook.Worksheets("Inserimento dati").Sort.SortFields.Add2 Key:=Range("P2:P1000" _
), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
With ActiveWorkbook.Worksheets("Inserimento dati").Sort
.SetRange Range("B2:AB1000")
.Header = xlNo
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
Set OutApp = Nothing
End Sub
In particolare nel file excel ci sono 3 fogli: Inserimento dati, Attiva Macro e Foglio2.
Nel foglio Inserimento dati vengono copiati i dati, in particolare nelle colonne O, P e U ci sono nome, cognome e indirizzo mail.
Nel foglio attiva Macro c'è il pulsante per attivare la macro e nelle colonne B, C, D vengono ricopiati i dati nome, cognome e indirizzo mail, mentre nella colonna G viene fatto il controllo dei doppioni con la formula proposta da Anthony47.
Il foglio 2 inizialmente è vuoto, alla fine della macro contiene i dati degli utenti a cui è stata inviata la mail e nella colonna A compare il nome del file inviato.
I file PDF vengono predisposti in una cartella C:\Miacartella\ e spostati nella cartella C:\Miacartella_utilizzati.
Ho aggiunto anche il riordino finale in ordine alfabetico dei dati rimasti alla fine della macro nel foglio Inserimento dati.
Ora vorrei provare a riutilizzare a scuola buona parte di questo lavoro, però vorrei usare LibreOffice, posso usare lo stesso codice nella macro oppure serviranno dei cambiamenti? Se come immagino sarà necessario apportare dei cambiamenti, mi sapreste aiutare?
Grazie ancora
Edit:
Applicato tag "CODE"
Anthony