Enviar correos desde Excel a través de Outlook en base a parámetros

Tengo una hoja de cálculo donde se lleva el control de los trámites ingresados (solicitante, número de trámite, responsable de la atención de dicho trámite con su dirección de correo electrónico, tiempo transcurrido para la atención, fecha de despacho de la respuesta, etc). Como es de esperarse hay varios trámites asignados para ser atendidos a la misma persona.

Lo que necesito es una macro que se ejecute al momento de abrir el libro de Excel, y que envié de manera automática un correo electrónico a través de Outlook todos los trámites que ya han cumplido un cierto número de días y de los cuáles no se ha registrado fecha de despacho respuesta, para cada uno de los responsables de dichos trámites.

1 respuesta

Respuesta
1

[Hola

Como para que te des ideas y vayas avanzando algo, dale una mirada a este enlace:

Saludos]

Abraham Valencia

Estimad Abraham

Primero agradezco tu pronta respuesta, y te pido disculpas por tardar en responder ya que estaba adaptando la linea de código al formato que estoy utilizando.

Te comento que me al momento de ejecutar la misma se me presentaron dos problemas:

  1. Al momento de ejecutar la línea de código del envío de alertas me sale "Se ha producido el error 13  en tiempo de ejecución: No coinciden los tipos".  Sin embargo, los email masivos se envían sin problema alguno y llegan a destino con normalidad.
  2. Al colocar la línea de código para que se ejecute el enviar las alertas al abrir el archivo me arroja el siguiente error: "Sub, Function o Property sin definir (error 35)".

Agradezco nuevamente tu atención, si requeires puedo enviarte el archivo para que evidencies lo que te he mencionado

Gracias

[Hola

Sin ver la macro es casi imposible saber que ocurre

Abraham Valencia

¿ Qué me recomiendas hacer?

Coloca el archivo en algún "Drive" (OneDrive, Google Drive, DropBox, etc.) y luego envía el enlace por aquí.

Abraham Valencia

Abraham te comparto el vínculo en OneDrive 

https://1drv.ms/x/s!An7xN7Oah1fdgr5Xf6fV-qLtQvC3gg 

[Hola nuevamente

La variable "UltimaFila" lo que hace es buscar la última celda llena de la columna 1 (A) pero tú no tienes ahí celdas vacías, sino celdas en blanco (con fórmulas) que es distinto, además de una celda con la palabra "Fin". El error que te da es porque siempre esa variable obtendrá un valor de 20000.

Cambia esto:

Let UltimaFila = Cells(Rows.Count, 1).End(xlUp).Row

Por esto:

Let UltimaFila = Application.WorksheetFunction.Count(Range("A1:A20000")) + 1

Y listo

Sobre el otro error, asumo que lo que hiciste es copiar/pegar toda la macro en el evento Open del libro, es decir, tuviste algo como esto al inicio:

Private Sub Workbook_Open()
Sub EnviarAlertas()
Dim OutlookApp As Outlook.Application
Dim objItem As MailItem
...

y algo así al final:

...
Next x
Set OutlookApp = Nothing
End Sub
End Sub

Lo que es un  error, no puede haber dos "End sub" en una rutina y mucho menos una rutina "Sub" dentro de un evento, se copia/pega todo menos la línea de "Sub..." o la de "End sub", no deben repetirse.

Otra forma es que coloques la macro en un módulo estándar y en el evento Open pongas:

Call  EnviarAlertas

Obvio si colocas la macro en un módulo estándar la borras del módulo de la hoja que es en donde la tienes ahora.

Abraham Valencia

Hola Abraham

Respecto al primer error, realicé el cambio en la línea y efectivamente se corrigió. Respecto al segundo error, coloque lo siguiente:

Private Sub workbook_open()
Call EnviarAlertas
End Sub

Pero me arroja el siguiente error: "Error de compilación: No se ha definido Sub o function", y no entiendo cuál es el error

Ese código que has colocado sí o sí tiene que estar en el módulo del libro, que por defecto lleva por nombre "ThisWorkBook".

Segundo, la macro, de preferencia, debe de estar en un módulo estándar, tú la tienes en un módulo de una hoja. Bórrala de la hoja y colócala en un módulo estándar.

Abraham Valencia

Lo he colocado en un modulo estándar independiente, inclusive probé colocándole en "ThisWorkBook" y el error sigue siendo el mismo, que no se ha definido sub

Hummm, coloca y/O actualiza el enlace con la nueva versión del archivo

Abraham Valencia

[Hola nuevamente

Lo que tienes es una confusión de conceptos; más que interpretar las cosas sugiero dar una leída a manuales básicos de VBA.

Mientras tanto te repito (ya te lo había dicho):

-El módulo del libro es aquel que lleva por nombre (por defecto) "ThisWorrkBook". Dicho módulo tiene el evento "Open" que se activa al abrir el archivo y por eso la importancia de colocar ahí el siguiente código:

Private Sub workbook_open()
Call EnviarAlertas
End Sub

Tú lo has colocado en un módulo estándar (que en tu caso se llama "Móduo1"). Debes borrarlo de ahí y colocar eso en el módulo del libro.

La macro "EnviarAlertas" debes colocarla en un módulo estándar, ya tienes uno como menciono en el párrafo anterior, pero tú la tienes en un módulo de hoja (que son módulos de Clase) que en tu caso es "Hoja1". Debes borrarlo de ahí y colocarlo en el "Módulo1" (estándar).

Abraham Valencia

Muchísimas gracias por tu ayuda y tu paciencia, con los cambios sugeridos la base de datos esta ejecutando estos procesos a la perfección

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas