Formulario de Alerta y Envío de Mail




En macro que envía mails se trató el tema sobre como enviar mail con Excel usando, Gmail, Hotmail o Yahoo, en dicho post había un listado de casillas de correo a las cuales había que enviarles un correo electrónico; para ello se usaba un bucle que recorre desde la fila inicial a la final, en cada recorrido envía un mails a los  distintos destinatarios que están en la fila respectiva,  es una Macro de Excel realizada en VBA que da solución a un sin numero de lectores que buscan poder enviar mails desde Excel.

En este post te presento un ejemplo de macro que es bastante útil cuando se  pretende que en el Libro de Excel,  salga un AVISO sobre algún evento  dependiendo de una fecha de realización o ejecución de determinada acción, básicamente esta Macro de Excel corre un formulario dando un AVISO y posteriormente ENVIANDO UN MAIL al destinatario del aviso, el cual se debe configurar en la respectiva función, tema que veremos antes de finalizar el post. Haciendo click en  la imagen podrás agrandarla y ver una primera impresión del libro.

En este blog se publicó una variante de macro que emite aviso y envía mail, es más común que la presentada aquí ya que recorre las filas verifica la fecha de service, emite aviso y manda mail con Excel, sugiero que veas este articulo ya que puede que se adapte a lo que necesitas.

En el libro de Excel se tienen una serie de fechas, que representan la fecha límite para realizar una acción determinada, la columna G tiene la fecha de realización de la tarea  mencionada; en la columna B se encuentra las distintas secciones que debe recorrer un producto.

Al abrir el libro de Excel primero se ejecuta un procedimiento de VBA  que se  encuentra en ThisWorkbook, está línea de código llama a otro procedimiento que se encuentra en  el Módulo 1, el cual determina en cada fila si la fecha de la columna F, es 30 días anterior a la fecha de Sistema y si la Columna G está vacía; en caso que la respuesta sea Verdadera; procede a mostrar el UserForm1, cuya programación  interna consiste en que el formulario esté 5 segundos y se cierre solo, posterior a ello se llama la función que envía mails, esto se  hace con cada una de las filas que contenga datos del departamento  en cuestión.

Es necesario hacer algunas consideraciones sobre la configuración de la PC; primero, para que funcione, el envío de mails, se debe agregar una referencia en el Editor de Visual Basic  que es Microsoft CDO for Windows 2000 Library, haciendo click en la imagen siguiente, se podrá observar  con más lujos de detalle, la referencia que se debe agregar para que se puedan envíar mails desde Excel.

Bien configurado esto, viene el otro paso  para que se puedan enviar mails con  Excel y no salte error; la función que envía mail está  por defecto  configurada para Gmail, no obstante se agrega en forma de comentario ( ' apostrofe), el servidor Smtp de Yahoo y Hotmail, que son  los correos más populares, si no se tiene estos correos, se puede probar con otros y configurar servidor Smtp y el puerto de salida, lo cual dejaría enviar mails y no daría errores.

El servidor Smtp  de Google  es  "smtp.gmail.com"; el de Hotmail es "smtp.live.com" y el de Yahoo es: "out.izymail.com"; en el caso que se  tuviera una modificación, se debe buscar en google cual es el servidor smpt y puerto del correo que estemos usando.

Una vez finalizado el paso anterior, se  deben  realizar otras modificaciones y de esta manera estar condiciones de enviar mails, se debe colocar el nombre de usuario y clave del correo que envía los mails; como así también cual es el mail de origen, cual el de destino. Seguidamente se muestra los códigos utilizados.




  

Antes de continuar, recomiendo que leas un excelente libro sobre Excel el que te ayudará operar las planillas de cálculo, haz click acá, si quieres aprender sobre Excel, en inglés, entonces debes hacer click here. Si lo que necesitas es aprender o profundizar sobre la programación de macros con VBA este es unos de los mejores cursos on line que he visto en internet.

Código que se inserta en ThisWorkbook del libro  de Excel, descarga el ejemplo desde el link del final para verlo en funcionamiento.



Private Sub Workbook_Open()
Call Aviso
End Sub

Código que se inserta en un módulo
Public msj As String
Sub Aviso()
Application.ScreenUpdating = False
Application.DisplayAlerts = False
On Error Resume Next
If SheeAts("Ejecu").Cells(5, 7) = Empty And Sheets("Ejecu").Cells(5, 6).Value - 30 <= Date Then
msj = "Recolección 1"
UserForm1.Show
Sdm = SendMail_mail()
End If
If Sheets("Ejecu").Cells(6, 7) = Empty And Sheets("Ejecu").Cells(6, 6).Value - 30 <= Date Then
msj = "Recolección 2"
UserForm1.Show
Sdm = SendMail_mail()
End If
If Sheets("Ejecu").Cells(9, 7) = Empty And Sheets("Ejecu").Cells(9, 6).Value - 30 <= Date Then
msj = "Limpieza 5"
UserForm1.Show
Sdm = SendMail_mail()
End If
If Sheets("Ejecu").Cells(10, 7) = Empty And Sheets("Ejecu").Cells(10, 6).Value - 30 <= Date Then
msj = "Separado 6"
UserForm1.Show
Sdm = SendMail_mail()
End If
If Sheets("Ejecu").Cells(11, 7) = Empty And Sheets("Ejecu").Cells(11, 6).Value - 30 <= Date Then
msj = "Secado 7"
UserForm1.Show
Sdm = SendMail_mail()
End If
If Sheets("Ejecu").Cells(12, 7) = Empty And Sheets("Ejecu").Cells(12, 6).Value - 30 <= Date Then
msj = "Embolsado 8"
UserForm1.Show
Sdm = SendMail_mail()
End If
If Sheets("Ejecu").Cells(13, 7) = Empty And Sheets("Ejecu").Cells(13, 6).Value - 30 <= Date Then
msj = "Etiquetado 9"
UserForm1.Show
Sdm = SendMail_mail()
End If
Application.DisplayAlerts = False
Application.ScreenUpdating = True
End Sub



Código que se inserta en un formulario

Private Sub UserForm_Activate()
Tpo = "00:00:02"
Label1.Font = arial
Label1.Font.Size = 18
Label1.Caption = msj
Application.Wait Now + TimeValue(Tpo)
UserForm1.Hide
End Sub


Código que se inserta en un módulo, es la función que envía mails

Function SendMail_mail() As Boolean
'Dimensiono variables
Dim Email As CDO.Message
Dim Autentificion As Boolean
'Creo el objeto email
Set Email = New CDO.Message
'Ponemos datos del servidor a usar
Email.Configuration.Fields(cdoSMTPServer) = "smtp.gmail.com" 'Gmail
'Email.Configuration.Fields(cdoSMTPServer) = "smtp.live.com" 'hotmail
'Email.Configuration.Fields(cdoSMTPServer) = "out.izymail.com" 'yahoo
Email.Configuration.Fields(cdoSendUsingMethod) = 2
'Indicamos el número de puerto smtp
Email.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = CLng(465) 'gmail
'Email.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = CLng(25) 'hotmail
'Email.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = CLng(25) 'yahoo
'Decimos si requiere o no autentificación 1 requiere, 0 no requiere
Email.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/" & "configuration/smtpauthenticate") = Abs(1)
'Segundos de espera
Email.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpconnectiontimeout") = 30
'Definición de verdadero para la autentificación
Autentificacion = True
'Configuramos el ingreso al mail
If Autentificacion Then
    'nombre de usuario
    Email.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendusername") = "mimail@gmail.com"
    'password
    Email.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendpassword") = "miclave"
    'si el servidor utiliza SSL (secure socket layer). en gmail: True
    Email.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpusessl") = True
End If
' Una vez configurado nuestro servidor de correo tomados datos de excel para enviar el mail
    'Correo del destinatario
    Email.To = "emaildestino@yahoo.com"
    'Dirección del remitente
    Email.From = "emailremitente@gmail.com"
   ' Asunto
    Email.Subject = msj
   ' Mensaje
    Email.TextBody = "Faltan pocos días hasta la fecha de realización de " & msj
  
   'Actualizamos datos antes del envio
    Email.Configuration.Fields.Update
   'Controlo errores
   On Error Resume Next
   'enviamos propiamente el mail
    Email.Send
    'Si no hay errores la funcion es verdadero
    If Err.Number = 0 Then
       SendMail_Gmail = True
    Else
     'Sale msgbox con descripción del error
       MsgBox "Se produjo el siguiente error: " & Err.Description, vbCritical, "Error nro " & Err.Number
   End If
   'Borro los objetos
    If Not Email Is Nothing Then
       Set Email = Nothing
    End If
    'Controlo errores
    On Error GoTo 0
End Function







Si te fue de utilidad puedes INVITARME UN CAFÉ y de esta manera ayudar a seguir manteniendo la página, CLICK para descargar en ejemplo en forma gratuita.



If this post was helpful INVITE ME A COFFEE and so help keep up the page, CLICK to download free example.

Si te gustó por favor compártelo con tus amigos
If you liked please share it with your friends