.
![](https://macrosenexcel.com/wp-content/uploads/2013/08/47FormulariodeAlertayenviamensajeporMail.jpg)
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.
Si te estás iniciando en la operación de Excel o requieres afirmar conocimientos, recomiendo leer un excelente libro sobre Excel que te ayudará operar las planillas u hojas 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.
Una explicación más detallada y gráfica de la macro presentada se muestra en el vídeo que se muestra seguidamente, recomiendo observar para una más fácil comprensión de la macro; suscribe a nuestra web desde la parte superior derecha de la página ingresando tu mail y a nuestro canal de You Tube para recibir en tu correo vídeos explicativos sobre macros interesantes, como por ejemplo Como cerrar libro dependiendo de fecha de caducidad, buscar en listbox mientras escribes en textbox, Como conectar Excel con Word crear archivo e insertar texto, Como crear un autonumerico en Excel y muchos ejemplos más.
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 gustó por favor compártelo con tus amigos
If you liked please share it with your friends