Error en envío informe por email desde formulario en Access

Tengo las tablas [Pedidos], [Líneas], [Clientes], [Artículos]..., la consulta [Cpedidos]con las tablas anteriormente citadas.

Tengo un formulario con la siguiente propiedad en Origen del registro: SELECT [PEDIDOS].[numped], [PEDIDOS].[fechaped], [PEDIDOS].[codigcli], [PEDIDOS].[MES], [PEDIDOS].[observaciones], [PEDIDOS].[CLAVE],[CLIENTES].[emailcli], [CLIENTES].[nombrcli] FROM CLIENTES INNER JOIN PEDIDOS ON CLIENTES.codigcli=PEDIDOS.codigcli; 

Este formulario tiene un subformulario  con la propiedad en origen del registro :SELECT LINEAS.*, ARTICULOS.descart FROM ARTICULOS INNER JOIN LINEAS ON ARTICULOS.codigart=LINEAS.codigart;

Después de introducir datos en el formulario tengo un botón de comando que ejecuta un macro de impresión del informe de ese pedido, el informe en propiedades Origen del registro=Cpedidos y en filtro= [Cpedidos]![numped]=[Forms]![Pedidos]![numped].

Bueno esto con la ayuda de Sveinbjorn El Rojo me funciona perfectamente pero el problema me surge si quiero enviar dicho informe por email.

Para ello según los ejemplos de Neckkito he creado un botón de comando con el siguiente código:

On Error GoTo sol_err
'Definimos las variables
Dim mailA As String
Dim mailCC As String
Dim elAsunto As String, elMsg As String
'Cogemos los valores que hemos indicado en el formulario
mailA = Me.emailcli.Value
mailCC = Nz(Me.cboCC.Value, "")
elAsunto = Nz(Me.TxtAsunto.Value, "")
elMsg = Nz(Me.TxtMsg.Value, "")
'Exportamos el informe en formato snapshot a la carpeta donde tenemos la BD
Dim ruta As String, miInforme As String
ruta = Application.CurrentProject.Path & "\"
miInforme = ruta & "Informe.pdf"
DoCmd.OutputTo acOutputReport, "Pedidos", "PDF", miInforme, False
'Creamos una instancia de Outlook
Dim Olk As Outlook.Application
Set Olk = CreateObject("Outlook.Application")
'Creamos un nuevo mensaje de Outlook
Dim OlkMsg As Outlook.MailItem
Set OlkMsg = Olk.CreateItem(olMailItem)
'Creamos la información del mail
With OlkMsg
'Definimos los elementos del mail
Dim OlkDestinatario As Outlook.Recipient
Dim OlkCopia As Outlook.Recipient
Dim OlkAdjunto As Outlook.Attachment
'Inicializamos los elementos del mail
Set OlkDestinatario = .Recipients.Add(mailA)
OlkDestinatario.Type = olTo
'Comprobamos que queremos copia
If mailCC <> "" Then
Set OlkCopia = .Recipients.Add(mailCC)
OlkCopia.Type = olCC
End If
'Comprobamos que exista el archivo que vamos a adjuntar
If Not IsMissing(miInforme) Then
Set OlkAdjunto = .Attachments.Add(miInforme)
End If
'Añadimos los elementos Asunto y Mensaje
.Subject = elAsunto
.Body = elMsg
'Enviamos el mail
.Send
End With
'Lanzamos un mensaje de OK
MsgBox "El mensaje se ha enviado correctamente", vbInformation, "CORRECTO"
'Eliminamos el archivo Informe.snp de la carpeta
Kill miInforme
'Eliminamos la instancia
Set Olk = Nothing
Set OlkMsg = Nothing
Set OlkDestinatario = Nothing
Set OlkAdjunto = Nothing
Salida:
Exit Sub
sol_err:
MsgBox Err.Number & ": " & Err.Description
Resume Salida

El resultado es que me da error: -2147467259 Outlook no reconoce alguno de los nombres.

Si pongo Display en lugar de Send al visualizar el correo pone en Para: m……[email protected]#mailto:m……[email protected]#

Por favor una vez más pido vuestra ayuda.

1 respuesta

Respuesta
1

Por lo que comentas, tu campo emailcli parece que lo has definido como hipervínculo.

Una posible solución sería que al asignar el valor a la variable mailA, "trabajases" el valor del campo para eliminar los caracteres que van desde el primer # hasta el final.

Para eso, has de usar las funciones InStr() y Left() conbinadas:

mailA=Left(Me.emailcli.Value,InStr(1,Me.emailcli.Value,"#")-1)

Es decir, con InStr buscas la posición del primer "#" y con left te quedas con los x caracteres que hay antes de esa posición (por eso el -1)

Ya me dirás si así te funciona.

Muchas gracias, como siempre te encuentro ahí para ayudarme.

Funciona perfectamente, pero me envía todos los pedidos.

Si doy a imprimir si que me imprime solamente el pedido que esta en ese momento en el formulario, te explico lo que hago es que después de introducir datos en el formulario tengo un botón de comando que ejecuta un macro de impresión del informe de ese pedido, el informe en propiedades Origen del registro=Cpedidos y en filtro= [Cpedidos]![numped]=[Forms]![Pedidos]![numped].

El informe se llama [Pedidos] y esta basado como he explicado en la pregunta de antes en la consulta [Cpedidos].

Espero que me entiendas lo que quiero decir, porque sinceramente no se porque puse ese filtro, pero como me funciono seguí para adelante, ya sabes mi gran inexperiencia.

Un saludo

El filtro lo pusiste para que el informe sólo te imprima los datos del registro activo en el formulario (los registros en que el campo numped de la consulta sean igual al valor del cuadro de texto numped de tu formulario)

Lo que no sé es por qué al exportar el informe con DoCmd. OutputTo no te palica el filtro.

Una posible solución, si la consulta Cpedidos sólo la usas como base para el informe, es que metas el filtro dentro de la propia consulta y lo borres de las propiedades del formulario. Para ello, abre Cpedidos en vista diseño, y en la columna del campo numped, en la fila de criterios, le escribes

=[Forms]![Pedidos]![numped]

Con eso te debería bastar. Si la consulta la usas para más cosas, hazle una copia con otro nombre (CpedidosInforme, por ejemplo), le pones el criterio, y la usas como base del informe, cambiando el origen del registro por la nueva, es decir, origen del registro=CpedidosInforme.

Buenos días,

No me funciona me sale Introduzca el valor del parámetro Formularios! Pedidos!numped

¿Me puedes decir de alguna otra manera?

Te digo lo que hace la macro impresión por si eso te dice algo sobre lo que tengo hecho para imprimir y que me funciona.

La macro abre el informe Pedidos y la condicion Where=[Cpedidos]![numped]=[Formularios]![PEDIDOS]![numped].

¿Me puedes pasar una copia de tu BD sólo con las tablas, la consulta Cpedidos, el formulario PEDIDOS y el informe Pedidos?

Lo siento te mando toda la base porque no se como dejártela con menos y que no afecte a algo.

el enlace es http://www.filebig.net/files/BRvTg7uNr4 

Como veras el formulario que estaba haciendo para el envío del pedido es PedidosSimpleEmail.

Por favor no borres de tu fichero la base que te envío porque tengo que hacerte otras preguntas que como veras ya irán siendo las ultimas porque creo que tengo el programa casi terminado.

Te repito incansablemente las GRACIAS

Mirando por encima tu archivo, porque hasta la noche no tengo tiempo, veo un par de errores:

1º/ el filtro que tienes en tu informe no sirve de nada, pues le tienes la propiedad Filtrar al cargar en No, y por tanto no se ejecuta ese filtro nunca, y por eso en el email te manda un informe con todos los registros

2º/ en tu formulario PedidosSimpleEmail (y tb en PEDIDOS), el cuadro en el que tienes el numero de pedido se llama Texto19 y no numped (puedes verlo en la pestaña Otras -> Nombre), así que o lo renombras a numped o haces referencia a el en las macros y código como Texto19

3º/ En la parte =[Formularios]![PEDIDOS]![numped], haces referencia al formulario PEDIDOS, mientras que aquí me dices que el formulario es PedidosSimpleMail. en esa expresión siempre has de poner el nombre del formulario y del control correctos, y además, el formulario tiene que estar abierto, pues de lo contrario te saldrá siempre la ventana pidiendo el numped.

Tal y como lo tienes ahora sería:

[Cpedidos]![numped]=[Formularios]![PedidosSimpleMail]![Texto19]

Y esto tanto para los criterios en las macros, código y consultas.

A ver si con estas indicaciones puedes solucionarlo tú misma, si no, por la noche, te mando de vuelta el archivo modificado para que funcione.

Lo siento he realizado los cambios que me has dicho y no me funciona, no se lo que hago mal.

El formulario PedidosSimpleEmail es en el que he realizado todos los cambios para el envío por eail para no estropear el de Pedidos que me funciona para impresión y cuando logre que funcione el envío por email dejare el válido para en elvio por los dos modos (impresión y email).

No puedo seguir trasteando más hasta la noche porque es el cumpleaños de mi nieto, a la vuelta seguiré.

Gracias por todas las molestias que te estoy dando.

Te devuelvo la BD funcionando en el formulario PEDIDOSsimpleEMAIL: http://www.filebig.net/files/sXtt6C4TT5 

Te comento los fallos y cómo los solucioné:

1º/ En el formulario PEDIDOSsimpleEMAIL, no tienes ningún control (cuadro de texto) llamado numped. Sol: renombrar el que se llama Texto19 a numped

2º/ En el botón para imprimir (Comando41), le tienes una macro incrustada, pero le falta que le pongas antes de la llama a la macro que imprime el informe que guarde los datos del nuevo registro

3º/ En la macro Imprimir Pedidos, tiene mal la condición, que tiene que ser esta (para este formulario): [Cpedidos]![numped]=[Formularios]![PEDIDOSsimpleEMAIL]![numped]

4º/ Para que el botón de enviar por mail no te genere un informe con todos los registros, has de modificar el Filtro en la pestaña Datos ([Cpedidos]![numped]=[Formularios]![PEDIDOSsimpleEMAIL]![numped]) , y ponerle Filtrar al cargar en Sí.

Si haces el paso 4, puedes eliminar la condición del punto 3, pues ya se encarga el propio informe de filtrar el registro que quieres.

También la macro del punto 3 la puedes simplificar si le dices que te la Vita sea Imprimir, y puedes eliminar las otras dos acciones (imprimir objeto y cerrar informe)

Muchísimas gracias, no me canso de repetir que eres genial.

Funciona de maravilla

Esta siendo mi salvación pues ya has podido comprobar mis tremendas limitaciones en Access.

Un saludo

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas