Enviar un informe con el nombre de un campo

Me gustaría que me ayudaran a resolver una duda, quiero enviar por correo un informe que tenga por nombre el campo de un formulario access.

Este es el código que uso para mandarlo

DoCmd.SendObject acSendReport, "informemensajeria", "pdf", DLookup("[Dirección de correo electrónico]", "Empleados", "[Id]=" & Nz(Destinatario, 0)), "", "", Replace("Entrada mensajería de |", "|", Nz(Title, "")), IIf(Form.Title.TextFormat = 1, PlainText(Destinatario), [Cuerpomensaje]), True, ""

Lo mando sin problemas pero me ha salido la curiosidad de mandar el informe según un valor de un campo del formulario ese campo se llama Title.

Buscando por internet vi :

nombredelinforme.Caption="titulo"

Pero no se donde ponerlo para que al enviar el correo cambie el nombre del informe por el valor del campo title.

1 respuesta

Respuesta
1

Hasta donde yo sé no es posible hacerlo directamente como pides. Sin embargo, sí puedes hacer una "trampa" y colarle el gol a Access :)

Haz la prueba en una copia de tu BD porque no lo he testeado: me lo he inventado sobre la marcha.

Lo primero que necesitamos es capturar qué título le vamos a dar al informe. Para ello declaramos una variable y cogemos el valor del campo del formulario, que voy a suponer que se llama [Title], si no he interpretado mal tu mensaje.

Eso se haría con:

Dim miTitulo as string

miTitulo = nz(me.Title.value,"")

Para evitarnos errores si el campo título está vacío vamos a añadir otra línea que nos lo deje con un nombre casi igual al original. Esa línea sería:

If miTitulo="" then miTitulo="informe_mensajeria"

A continuación vamos a coger el informe llamado "informemensajería" y lo vamos a copiar, poniéndole el título que nos interesa:

DoCmd. CopyObject, miTitulo, acReport, "informemensajeria"

Seguidamente lo enviamos utilizando tu código, al que sólo habría que cambiarle una palabra (la marcada en negrita), así:

DoCmd.SendObject acSendReport, miTitulo, "pdf", DLookup("[Dirección de correo electrónico]", "Empleados", "[Id]=" & Nz(Destinatario, 0)), "", "", Replace("Entrada mensajería de |", "|", Nz(Title, "")), IIf(Form.Title.TextFormat = 1, PlainText(Destinatario), [Cuerpomensaje]), True, ""

Finalmente borramos el informe que hemos copiado, de la siguiente manera:

DoCmd. DeleteObject acReport, miTitulo

Y listos!

El código entero quedaría así:

...

Dim miTitulo as string
miTitulo = nz(me.Title.value,"")

If miTitulo="" then miTitulo="informe_mensajeria"

DoCmd.CopyObject , miTitulo, acReport, "informemensajeria"

DoCmd.SendObject acSendReport, miTitulo, "pdf", DLookup("[Dirección de correo electrónico]", "Empleados", "[Id]=" & Nz(Destinatario, 0)), "", "", Replace("Entrada mensajería de |", "|", Nz(Title, "")), IIf(Form.Title.TextFormat = 1, PlainText(Destinatario), [Cuerpomensaje]), True, ""

DoCmd. DeleteObject acReport, miTitulo

...

Insisto, hazlo sobre una copia de tu BD porque se están creando y borrando objetos de la BD y, aunque en principio no se tocan en ningún momento los objetos originales, por eso de ser precavido mejor haz la prueba en una copia.

Ya me dirás si te ha funcionado.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas