Macro para enviar correo por Gmail automáticamente cuando una celda es distinta de cero

Tengo un archivo de Excel que se actualiza regularmente de manera automática en función de distintas entradas y de distintas personas. Ese Excel está permanentemente abierto, por lo que puede cambiar en cualquier momento.

Lo que necesitaba era una macro que se encargue de enviarme un email automáticamente cuando la celda C7 de la hoja "Datos" de mi archivo de Excel sea distinta de cero. Ese email se enviaría por Gmail (no Outlook), y lo único que tendría que hacer ese email es poner en el Asunto "Alarma" (ni enviar archivos, ni datos, ni nada, sólo ese texto de "Alarma".

He estado mirando otras preguntas y me he estado peleando con algunas macros, pero mis conocimientos de vba no alcanzan a lograrlo.

1 respuesta

Respuesta
1

[Hola

Entonces ¿el problema es que no puedes enviar desde "Gmail" o que no sabes como hacerlo de formar automática dependiendo del valor de una celda? ¿O las dos cosas son el problema?

Abraham Valencia

El problema es que no sé programar una macro que envíe un email, con las características que indiqué, cuando el valor de esa celda sea distinto de cero. A mayores, quisiera que ese mail que necesito que envíe la macro, lo haga a través de mi cuenta de Gmail (no por Outlook)

Lo que pasa es que tienes que ir por parte.

Lo primero es que sepas como enviar un mensaje usando tu "gmail". Mira este enlace:

https://www.rondebruin.nl/win/s1/cdo.htm 

Abraham Valencia

Hola Abraham

Antes de nada, gracias por tu ayuda. 

He seguido los pasos de la página que me indicas, pero no he conseguido enviar el email. El mensaje que me da Microsoft Visual Basic es el siguiente:

Run-time-error ' 2147220960 (80040220)

The "SendUSing" configuración value is invalidez.

No sé si es cuestión de que hago algo mal o de que no puedo enviar desde Excel a través de mi cuenta de Gmail

Un saludo

Pues si seguiste los pasos no debería haber problema pero no olvides activar en el editor de VBA la referencia a "Microsoft CDO for Windows 2000 Library".

Otra cosa, por si acaso si vas a usar tu "Gmail" desde VBA (u otras aplicaciones), "Google" ha colocado algunas medidas de protección que debes de cambiar:

Debes dejarlo como te muestro en la imagen o de lo contrario siempre tu macro te dará error.

Abraham Valencia

He hecho las dos cosas. Y nada. Creo que voy a abrir una cuenta en Outlook. ¿Así es más fácil hacer esa macro?

Gracias

A ver, un último intento. Solo reemplaza por tu correo, clave y destinatario:

Sub CDO_Mail_Small_Text_2()
    Dim iMsg As Object
    Dim iConf As Object
    Dim strbody As String
    Dim Flds As Variant
    Set iMsg = CreateObject("CDO.Message")
    Set iConf = CreateObject("CDO.Configuration")
    iConf.Load -1
    Set Flds = iConf.Fields
    With Flds
        .Item("http://schemas.microsoft.com/cdo/configuration/smtpusessl") = True
        .Item("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = 1
        .Item("http://schemas.microsoft.com/cdo/configuration/sendusername") = "[email protected]"
        .Item("http://schemas.microsoft.com/cdo/configuration/sendpassword") = "tuclave"
        .Item("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "smtp.gmail.com"
        .Item("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
        .Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 465
        .Update
    End With
    strbody = "Esto es una prueba"
    With iMsg
        Set .Configuration = iConf
        .To = "[email protected]"
        .CC = ""
        .BCC = ""
        .From = "[email protected]"
        .Subject = "Prueba"
        .TextBody = strbody
        .Send
    End With
End Sub

Comentas

Abraham Valencia

¡Gracias! 

Ahora sí funciona. Entiendo que ahora hay que poner la macro que se encargue de enviarme un email automáticamente cuando la celda C7 de la hoja "Datos" de mi archivo de Excel sea distinta de cero. Lo único que tendría que hacer ese email es poner en el Asunto "Alarma" . Eso sí, la tabla está siempre abierta, así que no sería un email que se lanza al abrir el archivo, sino que se lanzaría en cuanto el valor de esa celda sea distinto de cero. 

No sé si se entiende lo que quiero hacer.

Gracias de nuevo por tu ayuda

En "C7" ¿tienes una fórmula o ingresas de otro modo los valores?

Abraham Valencia

Hola Abraham
En la celda C7 lo que tengo es la siguiente fórmula: COUNTIF(C8:C26;"ALARMA")

Básicamente lo que hace es si ninguna de las celdas del rango cumplen una condición se mantiene en 0, si no, lo que hace es contar cuántas de esas celdas están en "Alarma".

Lo que yo quiero es que cuando en C7 aparezca un número distinto de cero (lo que supone que alguna de las del rango c8:c26 está en "alarma") me envíe un mail automáticamente a mi correo de gmail con el Asunto "Alarma"

Muchas gracias

[Hola

Debes usar el evento "Calculate" de tu hoja:

Private Sub Worksheet_Calculate()
  Static x
  On Error Resume Next
  If Range("C7") = x Then Exit Sub
Call nombredetumacroqueenviacorreo
 x = Range("C7")
End Sub

Saludos]

Abraham Valencia

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas