Ciao Icebrand ,
Ti ringrazio per la risposta, ma come faccio a inviare la mail solo ai fornitori che rispettano la condizione sotto riportata?
La cella F1 contiene la funzione oggi() che determina la data all'apertura del file.
Avrei bisogno di inviare una mail agli indirizzi contenuti nella colonna C solo a quei fornitori per i quali il documento risulta scaduto (data contenuta nella cella Dxxx < alla data contenuta della cella F1)
- Alt-F11**** per aprire l'editor di VBA
- Alt-IM per 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, rngData As Range
Dim dDate As Date
Dim oOutApp As Object
Dim oOutMail As Object
Dim rCell As Range
Dim LRow As Long
Dim sCorpo As String
Const sNomeDiFoglio As String = "Foglio1" '<<=== Modifica
Const PrimaRiga As Long = 4 '<<=== Modifica
Const sIndirizzoData As String = "F1" '<<=== Modifica
Const sSoggetto As String = _
"Un promemoria - Scadenza di Contratto" '<<=== Modifica
Set WB = ThisWorkbook
Set SH = WB.Sheets(sNomeDiFoglio)
With SH
LRow = LastRow(SH, .Columns("A:A"))
Set Rng = .Range("A" & PrimaRiga & ":A" & LRow)
Set rngData = .Range(sIndirizzoData)
dDate = rngData.Value
End With
On Error GoTo XIT
Application.ScreenUpdating = False
Set oOutApp = CreateObject("Outlook.Application")
For Each rCell In Rng.Cells
With rCell
.Select
If IsDate(.Offset(0, 3).Value) _
And .Offset(0, 3).Value < dDate Then
If .Offset(0, 2).Value Like "?*@?*.?*" Then
sCorpo = "Egregio " & .Offset(0, 1).Value _
& vbNewLine & vbNewLine & _
"Vi preghiamo di contattarci per discutere il contratto " _
& "il quale risulta scaduto il " _
& vbNewLine _
& vbTab & vbTab & vbTab _
& Format(.Offset(0, 3).Value, "dd,mmmm yyyy")
Set oOutMail = oOutApp.CreateItem(0)
On Error Resume Next
With oOutMail
.To = rCell.Offset(0, 2).Value
.Subject = sSoggetto
.Body = sCorpo
'You can add files also like this
'.Attachments.Add ("C:\test.txt")
.Display '\ per vedere la email prima di inviarla; per inviarla automaticamente,
'\ sostituisci .Display con
.Send
End With
On Error GoTo 0
Set oOutMail = Nothing
End If
End If
End With
Next rCell
XIT:
Set oOutApp = Nothing
Application.ScreenUpdating = True
End Sub
'--------->>
Public Function LastRow(SH As Worksheet, _
Optional Rng As Range)
If Rng Is Nothing Then
Set Rng = SH.Cells
End If
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
End Function
'<<=========
- Alt-Q per chiudere l'editor di VBA e tornare a Excel.
- Alt-F8 per aprire la finestra di gestione delle macro
- Seleziona Tester | Esegui
Potresti scaricare il mio file di prova Icebrand210150405.xlsm a: **http://1drv.ms/1EZIrGQ**
===
Regards,
Norman