Ciao Bigigio,
innanzitutto mi scuso se posto questa richiesta in quanto so che è stata trattata su diversi forum ed in forme differenti.
Da neofita ed ignorante in materia, ho provato a interpretare più di una macro trovata nella rete e utilizzata a questo scopo, cercando di adattarla alle mie esigenze, ma non sono riuscito ad arrivare ad un risultato positivo.
Chiedo una mano a chi si sente di potermela dare.
Ho Outlook 2016 ed il foglio che ho creato è molto semplice:
- Colonna A: indirizzo mail
- Colonna B: Cognome
- Colonna C: Nome
- Colonna D: Sig. (o Sig.ra)
- Colonna E: Percorso allegato
- Colonna F: Nome allegato.PDF
I record partono dalla riga 2 e sono 360
Quello che vorrei ottenere è una mail per ogni indirizzo, che abbia un testo simile:
Buongiorno sig. "Cognome",
assaadfafl dlfj slk flsdkj ò sal as pofòlsa pap òak
Cordiali saluti
In questa posizione vorrei anche inserire la firma composta da un'immagine e più righe di testo.
A questo testo, uguale per tutti, tranne il "Cognome", dovrei allegare il file corrispondente (percorso e nome file sono nella colonna E ed F alla riga corrispondente al Cognome).
Prova qualcosa del genere:
- Alt+F11 per aprire l'editor di VBA
- Alt+IMper inserire un nuovo modulo di codice
- Nel nuovo modulo vuoto, incolla il seguente codice:
'=========>>
Option Explicit
'--------->>
Public Sub Tester()
Dim WB As Workbook
Dim SH As Worksheet
Dim Rng As Range
Dim arrIn As Variant
Dim oOutlook As Object
Dim oMail As Object
Dim sIndirizzo As String
Dim sNome As String
Dim sCognome As String
Dim sTitolo As String
Dim sPercorso As String
Dim sAllegato As String
Dim LRow As Long, i As Long
Const sFoglio As String = "Foglio1" '<<=== Modifica
Const sOggetto As String = "Vote for Trump" '<<=== Modifica
Const sSalutazione As String = "Buon giorno " '<<=== Modifica
Set WB = ThisWorkbook
Set SH = WB.Sheets(sFoglio)
With SH
LRow = LastRow(SH, .Columns("A:A"))
Set Rng = .Range("A2:F" & LRow)
End With
arrIn = Rng.Value2
Set oOutlook = CreateObject("Outlook.Application")
For i = 1 To UBound(arrIn)
Set oMail = oOutlook.CreateItem(0)
With oMail
sIndirizzo = arrIn(1, 1)
sCognome = arrIn(i, 2)
sNome = arrIn(i, 3)
sTitolo = arrIn(i, 4)
sPercorso = arrIn(i, 5)
sAllegato = arrIn(i, 6)
.To = sIndirizzo
.CC = ""
.BCC = ""
.Subject = sOggetto
.Body = sSalutazione & sTitolo & Space(1) _
& sNome & Space(1) & sCognome _
& vbNewLine & vbNewLine _
& "Alleghiamo il file " & sAllegato
.Attachments.Add sPercorso _
& Application.PathSeparator _
& sAllegato
.Send
End With
Set oMail = Nothing
Next i
Set oMail = Nothing
Set oOutlook = Nothing
End Sub
'--------->>
Public Function LastRow(SH As Worksheet, _
Optional Rng As Range, _
Optional minRow As Long = 1, _
Optional sPassword As String)
Dim bProtected As Boolean
With SH
If Rng Is Nothing Then
Set Rng = .Cells
End If
bProtected = .ProtectContents = True
If bProtected Then
Application.ScreenUpdating = False
.Unprotect Password:=sPassword
End If
End With
On Error Resume Next
LastRow = Rng.Find(What:="*", _
after:=Rng.Cells(1), _
Lookat:=xlPart, _
LookIn:=xlFormulas, _
SearchOrder:=xlByRows, _
SearchDirection:=xlPrevious, _
MatchCase:=False).Row
On Error GoTo 0
If LastRow < minRow Then
LastRow = minRow
End If
If bProtected Then
SH.Protect Password:=sPassword, _
UserInterfaceOnly:=True
End If
Application.ScreenUpdating = True
End Function
'<<=========
- Alt+Q per chiudere l'editor di VBA e tornare a Excel
- Salva il file con l’estensione xlsm
- Alt+F8 per aprire la finestra di gestione delle macro
- Seleziona
Tester
- Esegui
===
Regards,
Norman
