Access - Envio masivo de informes personalizados por email

   
Vista:

Envio masivo de informes personalizados por email

Publicado por Gabriel Rodas gabrielrodaslopez@gmail.com (5 intervenciones) el 26/03/2015 21:12:18
Hola a todos.

Tengo una pequeña base de datos en Access 2010 para controlar los ahorros de un grupo de personas. En la misma existe un formulario que sirve de filtro para generar un informe personalizado para cada ahorrante. Si quisiera enviar estados de cuenta a cada ahorrante (como los que envían los bancos mensualmente), tendría que hacerlo manualmente filtrando por ahorrante, generando el informe personalizado y enviándolo por correo uno a uno. Si tenemos más de 100 personas, pues esta acción nos consumiría mucho tiempo.

Lo que necesito es un código para que esto se haga automáticamente de forma masiva, no conozco mucho sobre vba, pero sé que si se puede hacer, el tema es como hacerlo, es por eso que solicito la ayuda de algún buen samaritano que ayude a este pobre ignorante en vba.

Lo ideal sería tener un formulario donde se escoja una fecha de inicio y otra de fin. El mismo formulario tendría un botón para una vez indicado el rango de fechas, ejecutar el envío masivo de los estados de cuenta por correo. El código recorrería la tabla de ahorrantes, registro por registro, generando un informe personalizado y enviándolo al correo que aparece en la misma tabla en formato pdf.

Aquí les adjunto la base de datos con la que estoy trabajando, para que tengan una mejor idea de lo que les estoy hablando, como verán ya el informe esta creado, sería ideal poder usar ese mismo formato.

http://1drv.ms/1EYELm3

Les agradezco de antemano la ayuda que me puedan brindar. Saludos
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Envio masivo de informes personalizados por email

Publicado por Emilio (221 intervenciones) el 26/03/2015 21:32:40
Hola Gabriel

Puedes mirar los ejemplos de Neckkito, el tiene varias formas de envio masivos de correos, tanto con CDO, con automatización y con SendObject, cuestion que te desidas por que método.
http://siliconproject.com.ar/neckkito/

Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Envio masivo de informes personalizados por email

Publicado por Gabriel (5 intervenciones) el 26/03/2015 21:58:24
Gracias Emilio,

Ya he visto los ejemplos de Neckkito y en la parte de envío están muy bien, el problema es que están dirigidos a envío masivos de un mismo informe y que yo lo que necesito es primero generar un informe personalizado por cada persona y luego enviarlo por correo.

Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Envio masivo de informes personalizados por email

Publicado por Emilio (221 intervenciones) el 27/03/2015 15:58:39
La verdad no entiendo por que dices que no te sirve, por ejemplo en el tercero, el tiene un inputbox de asunto, y otro del cuerpo del mensaje, si tu quieres personalizar eso pues tan sencillo de tenerlo en subformulario y escribir lo que lleva cada uno, claro tienes que trabajarlo un poco. es mas le puedes agregar un archivo adjunto personalizado o etc. posibilidades muchas, encontrar un ejemplo que haga lo que quieres con exactitud es dificil, busca con JJJT a ver que tiene el, también con Emilio Sáncha y con Enrique https://sites.google.com/site/jerrmex/descargas

Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Envio masivo de informes personalizados por email

Publicado por Gabriel (5 intervenciones) el 27/03/2015 19:11:44
Te pongo un ejemplo diferente a ver si lo comprendes mejor.

Un banco tiene muchos clientes, los clientes tienen cuentas y las cuentas tienen movimientos. Hasta aquí todo muy claro, pero este banco necesita que el sistema que ellos utilizan para llevar el control de los clientes, las cuentas y sus respectivos movimientos, mensualmente genere un archivo pdf con el estado de cuenta de cada cliente y luego se lo envié adjunto en un correo.

Entonces el archivo adjunto será diferente por cada cliente, dependerá de los movimientos que haya realizado este cliente en el transcurso del mes respectivo. Pero el correo si puede ser el mismo (asunto, cuerpo) salvo por el adjunto y la dirección de correo.

El ejemplo de Neckkito explica como enviar un correo por medio de access, de varias formas y hasta hay muy bien. Pero lo que no se como hacer es generar automáticamente un informe personalizado por cada "cliente" y luego adjuntarlo al correo.

Seguiré buscando a ver si puedo encontrar un código parecido. Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Envio masivo de informes personalizados por email

Publicado por jose (741 intervenciones) el 29/03/2015 18:14:32
eso que tu pretendes no es un correo masivo es un envio individual

eso es, ir recorriendo los clientes , generar el informe , enviar un correo y pasar al siguiente .
la carta o texto a djuntar si es igual para todos , la puedes tener grabada o que se genere a la hora del envio
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Envio masivo de informes personalizados por email

Publicado por Gabriel (5 intervenciones) el 31/03/2015 21:46:44
Ya encontré la solución en esta página viene un ejemplo muy útil, exactamente lo que estaba buscando.

www.proinf.netpermalinkenviar_informes_personalizados
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Envio masivo de informes personalizados por email

Publicado por Cristina (5 intervenciones) el 06/04/2015 11:14:10
Hola Gabriel,
Yo tengo el mismo problema que tú desde hace tiempo y aún no lo he solucionado.
El enlace que indicas no funciona, ¿podrías indicarme cómo lo has solucionado?, además tampoco tengo muchos conocimientos de VBA.
En mi caso, tengo que envíar a distintos municipios un informe personalizado a cada uno de ellos con el consumo de agua de un periodo.
Muchas gracias, un saludo,
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Envio masivo de informes personalizados por email

Publicado por Gabriel (5 intervenciones) el 06/04/2015 18:43:18
Hola,

Yo resolví el problema con una solución básica, que echa mano de un par de códigos. Antes de empezar debes crear un informe que será el que adjuntaras al correo, este informe a su vez está basado en una consulta que filtra el contenido en base a un criterio, que en mi ejemplo está definido por una variable temporal.

Ejemplo: si tienes un listado de municipios, pues la variable temporal será el nombre o código de uno de ellos, por lo que este será el criterio que filtrará la consulta y esta a su vez el informe. Igualmente puedes hacer variables temporales para guardar una fecha de inicio y otra fecha de cierres (desde y hasta), para adicionalmente filtrar los registro por fechas.

En la consulta, vista diseño, campo MUNICIPIO o CODIGO, pondrás esto:
=[Variables temporales]![Nombre_de_tu_variable]

Las variables temporales para fechas filtrarán el campo de fecha de tu BD, en la consulta la puedes definir así:
>=[Variables temporales]![Fecha1] AND <= [Variables temporales]![fecha2]

Con estas variables temporales puedes filtrar tu informe, ahora vamos a definirlas. Puedes crear un formulario en blanco ingresar un par de cuadros de texto, para introducir el rango de fechas, los nombras con algún nombre, ejemplo TXTDESDE y TXTHASTA, en el evento después de actualizar puedes crear un macro que defina una variable temporal, defines el nombre ejemplo FECHA1 y el valor TXTDESDE, lo mismo con la otra variable. Con esto consigues definir las variables de fecha.

Para definir la variable temporal del MUNICIPIO, debes crear un módulo independiente con este código:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
Option Compare Database
Option Explicit
 
'------------------------------------------------------------
' Definir variable temporal para filtro de estado de cuenta
'
'------------------------------------------------------------
Function Variable_temporal(valor As String) As String
 
On Error GoTo Variable_temporal_Err
 
    TempVars.Add "NOMBRE_DE_TU_VARIABLE", valor
 
 
Variable_temporal_Exit:
    Exit Function
 
Variable_temporal_Err:
    MsgBox Error$
    Resume Variable_temporal_Exit
 
End Function

Este módulo crea un procedimiento function, que define una variable temporal, de acuerdo al valor que se le pase.


Volvemos al formulario en blanco con los cuadros de texto para definir el rango de fechas. Aquí podemos personalizar un poco el formulario con algunas herramientas sencillas, en tu BD debes tener una tabla de municipios y sus datos entre ellos el email, puedes agregar un campo boolean (si/no) que se llame ENVIAR_CORREO, si está marcado entra en la lista de los registros a los que se les mandará un estado de cuenta.

Creas una consulta que filtre solo los municipios en los que el campo ENVIAR_CORREO sea TRUE.

En el formulario puedes incluir un cuadro de lista que muestre la consulta que acabas de crear, para visualizar a los municipios a los que se le enviará el correo.

Para finalizar crear un botón que contenga en el evento AL HACER CLIC, el siguiente código:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
Option Compare Database
Option Explicit
 
Private Sub CmdEnviar_Click()
On Error GoTo sol_err
 
'Declaración de variables
Dim Vmail As Variant
Dim VAsunto As Variant
Dim VMensaje As Variant
Dim rst As Recordset
Dim valor As String
 
 
 
'Creación del recordset
Set rst = CurrentDb.OpenRecordset("CAsociados_Correo")
'Si la consulta no devuelve ningun registro genera un mensaje de advertencia y termina el proceso
If rst.RecordCount = 0 Then
MsgBox "No existen registros en la consulta"
GoTo Salida
End If
 
'Indicamos el asunto y el mensaje
VAsunto = "Estado de cuenta"
 
 
 
'Se mueve al primer registro
rst.MoveFirst
 
'Se inicia el recorrido de los registros
Do Until rst.EOF
 
    'Se define la variable IdRegistro para filtrar el reporte
    valor = rst.Fields("Cedula").Value
    Call Variable_temporal(valor)
 
    VMensaje = "Estimad@ " & rst.Fields("Nombre").Value & " adjunto encontrará su estado de cuenta. Si tiene alguna consulta por favor comuníquese con nosotros."
    'Se toma el valor del destinatario
    Vmail = rst.Fields("Correo").Value
    'Si no contiene correo se pasa al siguiente registro
    If IsNull(Vmail) Then GoTo Siguiente
    'Se envia el correo
    DoCmd.SendObject acSendReport, "EstadoCuenta", acFormatPDF, Vmail, , , VAsunto, VMensaje, 0
Siguiente:
'Se mueve al registro siguiente
rst.MoveNext
Loop
 
Salida:
'Se cierran las conexiones y se libera la memoria
rst.Close
Set rst = Nothing
DoCmd.Close acForm, "FEnvioEstadoCuentaMasivo"
Exit Sub
sol_err:
Resume Salida:
End Sub

Este código es obra de NECKKITO, solo le hice algunos cambios, por ejemplo:

El recordset se basa en la consulta de los registros que tienen TRUE en el campo ENVIAR_CORREO.
Se agrega una variable llamada VALOR, que es la que se envía al procedimiento function creado previamente.
Dentro del DO UNTIL, se llama al procedimiento function para definir una variable temporal basado en el valor que se le está pasando, en tu caso podría ser el nombre o código de municipio.

El resto es simplemente la acción de enviar el correo con el informe adjunto, avanzando hacia adelante en los registros definidos en el recordset.

Te adjunto una base de datos de muestra con el ejemplo. Espero que te sea de utilidad.

http://1drv.ms/1FgasF7

Nota: si utilizas Outlook como cliente de correo, te dará un molesto aviso por cada correo, al que le deberás dar clic en permitir para que te deje avanzar. La solución más sencilla sería utilizar otro cliente de correo como thunderbird.

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar