Categoría: Excel

  • 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:

    Botón derecho sobre «Hoja1»

    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:

    Tabla que cambia

    El funcionamiento es muy sencillo.

    1. Cuando los datos de la tabla se actualizan, el script comprueba que la cantidad de la casilla F5 tenga un valor mayor que 0.
    2. En este caso envía un email a la dirección de correo especificada con los datos de la tabla.