Saltar al contenido
PROGRAMAR EN VBA MACROS DE EXCEL

Macro emite aviso y envia mail

.

Anteriormente se presentó en el post Formulario que emite aviso y envía mail una versión similar a la de este ejemplo, tiene unas variantes que se aplican a casos más específicos, en el post actual se presenta una macro que emite un aviso y envía mails, recorriendo todas las filas con datos, los dos ejemplos mencionados son parecidos, pero tienen sus variantes, se han agregado los dos para que cada lector use el que más se adapta a su libro de Excel.

Una variante a de macro que emite aviso y envía mail, es macro que emite aviso y envía mail a varios destinatarios, como el título lo dice, la principal diferencia es que prácticamente realiza el mismo procedimiento que la macro presentada en el post actual, con la diferencia que se envía a varios destinatarios.

También 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.

El ejemplo de macro que aquí se muestra 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.

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 F tiene la fecha de realización de la tarea  mencionada; en la columna B se encuentran los ID de los equipos y es la columna donde la macro se fija recorre hasta la última fila con datos, por ello es importante que no esté vacía ya que de lo contrario la macro se detiene.

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 AvisoMail, el cual determina en cada fila si la fecha de la columna F, es igual o anterior a la fecha del sistema; en caso que la respuesta sea Verdadera; procede a mostrar el UserForm3, cuya programación  interna consiste en que el formulario esté 2 segundos y se cierre solo, posterior a ello se llama la función que envía mails desde Excel, 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.

MASTERCARD PAYONEER

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.

Para finalizar con el desarrollo y en el caso que no tengas conocimiento suficiente sobre el manejo de hojas de Excel, te recomiendo antes de introducirte en el mundo de las macros, que leas un excelente libro sobre Excel el que te ayudará manejar las planillas de cálculo, debes hacer click acá, si quieres un libro sobre Excel, en inglés, entonces debes hacer click acá.

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
Dim fila, av, avEq, avDep As String
Dim fserv As Date
fila = 4
While Sheets(«Hoja1»).Cells(fila, 2) <> Empty
fserv = Sheets(«Hoja1»).Cells(fila, 6).Value
If fserv <= Date Then
avID = Sheets(«Hoja1»).Cells(fila, 2)
avDep = Sheets(«Hoja1»).Cells(fila, 3)
avEq = Sheets(«Hoja1»).Cells(fila, 5)
msj = «El equipo » & avEq & » del departamento » & avDep & » Requiere Service, el ID es » & avID
UserForm3.Show
Sdm = SendMail_mail()
End If
fila = fila + 1
Wend
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)
UserForm3.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

Otros post de utilidad:
Busca un dato en todas las hojas de excel
Combobox incrustado en Excel
Formulario para insertar datos en hoja de excel
Tutoriales sobre VBA
Llenar combobox y buscar datos
Mensaje de Alerta y envío de mail con Excel
Combobox que lista hojas de excel y las selecciona

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