Saltar al contenido
PROGRAMAR EN VBA MACROS DE EXCEL

Macro emite aviso y envia mail a varios destinatarios

.

En este post te voy a mostrar una macro que emite aviso y envía mail a varios destinatarios, lo cual presenta una variante a la entrega anterior en la cual también la macro emite aviso y envía mail, con la diferencia que solo se envía a un destinatario.


En el post Formulario que emite aviso y envía mail hay 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.

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; de la columna H se obtiene el segundo mail donde enviar el aviso, el primero mail se configura directamente en el módulo como se explica más abajo.

Un ejemplo práctico sobre su uso podría ser, que en la columna H del ejemplo, se agreguen los mails de los distintos supervisores del área y en el módulo sendmail del código se configure el mail del supervisor general, o encargado de todos los departamentos, de esta manera cuando encuentre una máquina o equipo que requiera service, enviará un mail al supervisor del área y el encargado general; el ejemplo planteado es muy útil y bastante común en muchas empresas que tienen máquinas y requieren service cada cierto tiempo.

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, dest1 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)
dest1 = Sheets(«Hoja1»).Cells(fila, 8)
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
Dim dests As String
‘Creo el objeto email
Set Email = New CDO.Message

‘CONFIGURAR DATOS DEL SERVIDOR QUE ENVIA MAIL
‘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» ‘CONFIGURAR CUENTA QUE ENVIA MAIL
    ‘password
    Email.Configuration.Fields.Item(«http://schemas.microsoft.com/cdo/configuration/sendpassword») = «miclave» ‘CONFIGURAR PASSWORD DE CUENTA QUE ENVIA MAIL
    ‘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
    dests = «destinatario@yahoo.es,» & dest1 ‘CONFIGURAR CUENTA DONDE ENVIAR MAIL ej para varios mails «mail1@yahoo.es,mail2@gmail.com»
    Email.To = dests
    ‘Dirección del remitente
    Email.From = «mimail@gmail.com» ‘CONFIGUAR CUENTA QUE ENVIA MAIL
   ‘ Asunto
    Email.Subject = «Aviso de Service Programados»
   ‘ Mensaje
    Email.TextBody = 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:
Ordenar datos automáticamente
Determinar los días laborables entre fecha y fecha
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