Automatizar Excel: Correo electrónico
Excel es una herramienta potentísima, eso es un hecho.
Cuando tienes una hoja que se nutre de una base de datos y que se actualiza periódicamente cada pocos minutos, viene muy bien que la propia hoja de cálculo nos avise de cualquier cambio que determine una acción a ejecutar.
Para solucionar esto, vamos a programar una macro que detecte los cambios en un rango (tabla) y que nos notifique vía correo electrónico. Esta macro presupone que tenemos instalado y configurado Outlook.
Para añadir nuestra macro, pulsaremos con el botón derecho sobre el nombre de nuestra hoja:
A continuación copiamos el código de abajo.
Dim xRg As Range
Private Sub Worksheet_Change(ByVal Target As Range)
On Error Resume Next
Set xRg = Intersect(Range("F5"), Target)
If xRg Is Nothing Then Exit Sub
If IsNumeric(Target.Value) And Target.Value > 0 Then
Call Mail_small_Text_Outlook
End If
End Sub
Sub Mail_small_Text_Outlook()
Dim xOutApp As Object
Dim xOutMail As Object
Dim xMailBody As String
Set xOutApp = CreateObject("Outlook.Application")
Set xOutMail = xOutApp.CreateItem(0)
' Select cell A5, *first line of data*.
Range("A5").Select
xMailBody = "Linea1" & vbNewLine & vbNewLine & _
"Linea2" & vbNewLine
Do Until IsEmpty(ActiveCell)
' Insert your code here.
xMailBody = xMailBody & vbNewLine & _
ActiveCell.Offset(0, 0).Value & "-" & _
ActiveCell.Offset(0, 1).Value & "-" & _
ActiveCell.Offset(0, 2).Value
' Step down 1 row from present location.
ActiveCell.Offset(1, 0).Select
Loop
On Error Resume Next
With xOutMail
.To = "[email protected]"
.CC = ""
.BCC = ""
.Subject = "Asunto del mensaje"
.Body = xMailBody
.Send 'or use .Display
End With
On Error GoTo 0
Set xOutMail = Nothing
Set xOutApp = Nothing
End Sub
La tabla tipo es la siguiente:
El funcionamiento es muy sencillo.
- Cuando los datos de la tabla se actualizan, el script comprueba que la cantidad de la casilla F5 tenga un valor mayor que 0.
- En este caso envía un email a la dirección de correo especificada con los datos de la tabla.