Vincular correos Access Outlook |
Responder | Página 12> |
Autor | |
valencianoblaugrana
Asiduo Unido: 20/Junio/2014 Localización: Alicante Estado: Sin conexión Puntos: 493 |
Tema: Vincular correos Access Outlook Enviado: 28/Septiembre/2019 a las 11:58 |
Buenos días Happy y muchas gracias por tu ayuda, rutina funcionando y sin ningún problema.
Se puede cerrar el hilo. Un Saludo
|
|
happy
Ver perfil usuario
Enviar mensaje privado
Ver los mensajes del usuario
Visite la página de los usuarios
Añadir a la lista de amigos
Moderador Unido: 29/Enero/2005 Localización: España Estado: Sin conexión Puntos: 3192 |
Enviado: 21/Septiembre/2019 a las 16:10 |
Pues entonces
- busca en la tabla el EntryID que coincida con el id_txt que tengas en el formulario (sentencia SQL con el Where adecuado) - carga el recordset con la SQL o utiliza si quieres un dlookup - visualiza el mensaje utilizando el EntryID que hayas recuperado en el recordset o en el dlookup
|
|
Saludos,
Juan M. Afan de Ribera |
|
valencianoblaugrana
Asiduo Unido: 20/Junio/2014 Localización: Alicante Estado: Sin conexión Puntos: 493 |
Enviado: 21/Septiembre/2019 a las 14:15 |
Yo lo que quiero es que me abra sólo aquel correo cuyo EntryID coincida con el id_txt que tengo activo en ese momento en el formulario. No que me abra los 5 que tengo ahora almacenados en la tabla.
Saludos |
|
happy
Ver perfil usuario
Enviar mensaje privado
Ver los mensajes del usuario
Visite la página de los usuarios
Añadir a la lista de amigos
Moderador Unido: 29/Enero/2005 Localización: España Estado: Sin conexión Puntos: 3192 |
Enviado: 21/Septiembre/2019 a las 13:55 |
Hombre, claro. Si la forma en que Outlook va a localizar cada mensaje o elemento es a través del EntryID, si tú le dices que EntyID = (en blanco), pues Outlook también se va a quedar (en blanco)
- Comprueba primero que el campo EntryID tenga algo dentro. - Si NO tiene nada, pasa al siguiente registro - Si contiene algo, pásale a Outlook el valor de EntryID (tal y como lo tienes ahora) para mostrar el mensaje. Igualmente, el código que utilizas te podría llegar a abrir un montón de mensajes uno detrás de otro. Ahora son 5, como dices, pero a lo mejor en el futuro tienes 30 o 100 o ... ¿Realmente es así como lo quieres hacer? Por otro lado también estaría bien que comprobaras que el EntryID, si existe, es válido y apunta a un mensaje real (no fuera que ese mensaje haya desaparecido o se haya movido a otra carpeta, con lo que el EntryID habría cambiado)
|
|
Saludos,
Juan M. Afan de Ribera |
|
valencianoblaugrana
Asiduo Unido: 20/Junio/2014 Localización: Alicante Estado: Sin conexión Puntos: 493 |
Enviado: 21/Septiembre/2019 a las 13:30 |
Hola Happy
Si, en la tabla están almacenados los "entryID" correspondientes, solo en los últimos 5 registros desde que estoy haciendo estas pruebas, los demás registros están en blanco. Influye eso? Saludos |
|
happy
Ver perfil usuario
Enviar mensaje privado
Ver los mensajes del usuario
Visite la página de los usuarios
Añadir a la lista de amigos
Moderador Unido: 29/Enero/2005 Localización: España Estado: Sin conexión Puntos: 3192 |
Enviado: 21/Septiembre/2019 a las 13:21 |
Pero ¿has comprobado previamente el valor que viene en rs("EntryID")?. Evidentemente, si como te aparece en el error, ese campo tiene un valor nulo o una cadena vacía, no hay nada qué hacer. Pon algún punto de interrupción en el código (señala una línea para detener y pulsa F9) y haz un debug.print nombre variable o un msgbox nombre variable para ver qué hay dentro de los campos del recordset o en las variables (también sirve si por encima de la variable o lo que sea pasas el ratón y te aparecerá un tool tip con el valor de esa variable o campo).
En la tabla ¿has comprobado que realmente hayas guardado el valor de EntryID en cada registro?
|
|
Saludos,
Juan M. Afan de Ribera |
|
valencianoblaugrana
Asiduo Unido: 20/Junio/2014 Localización: Alicante Estado: Sin conexión Puntos: 493 |
Enviado: 21/Septiembre/2019 a las 11:45 |
Buenos días Happy
Estoy utilizando el siguiente código para visualizar el correo en cuestión: Private Sub Visualizar_Click() Dim f As Outlook.Folder Dim Msg2 As Outlook.MailItem Dim rs As DAO.Recordset Dim Ns As Outlook.NameSpace Dim OutLookApp As Outlook.Application Set OutLookApp = CreateObject("Outlook.Application") Set Ns = OutLookApp.GetNamespace("MAPI") Set rs = CurrentDb.OpenRecordset("TDatos") Set f = Ns.GetDefaultFolder(olFolderSentMail) While Not rs.EOF ' referenciamos el mensaje de correo mediante su EntryID Set Msg2 = Ns.GetItemFromID(rs("EntryID")) ' visualizamos el correo Msg2.Display rs.MoveNext Wend End Sub El caso es que la ejecución se para en la linea en rojo y me dice que no es posible valor nulo. Decir que lo estoy ejecutando desde un formulario a través de un botón llamado "visualizar" en dicho formulario recupero el registro del correo que luego quiero ver en outlook el campo "EntryID" en el formulario se llama "ID_Txt". Muchas gracias Saludos
|
|
happy
Ver perfil usuario
Enviar mensaje privado
Ver los mensajes del usuario
Visite la página de los usuarios
Añadir a la lista de amigos
Moderador Unido: 29/Enero/2005 Localización: España Estado: Sin conexión Puntos: 3192 |
Enviado: 17/Septiembre/2019 a las 00:37 |
No se si te entiendo. ¿Qué formulario es ese que comentas? ¿Qué tiene que ver con la rutina de ejemplo que he puesto? Lo que debes hacer es adecuarla bien al procedimiento que tengas y pulirla y pulir también el procedimiento hasta que consigas el mejor rendimiento posible. Lo de los 300 correos ... yo, las pruebas que hice para esa rutina de ejemplo, las he hecho con una carpeta de Enviados que tiene unos 9.000 correos almacenados. No creo que vaya por ahí. Ya te lo decía en mi anterior mensaje, es un código de ejemplo. NO pretendo escribir rutinas para otras personas, sólo darles pistas para que aprendan y les ayuden a que se trabajen sus propios proyectos |
|
Saludos,
Juan M. Afan de Ribera |
|
valencianoblaugrana
Asiduo Unido: 20/Junio/2014 Localización: Alicante Estado: Sin conexión Puntos: 493 |
Enviado: 16/Septiembre/2019 a las 20:13 |
Hola Happy,
Es muy útil y funciona el último código,pero tarda mucho en ejecutar, puesto que si la carpeta enviados tiene mas de 300 correos, te obliga a tener el formulario abierto para que cuando el proceso termine copie el EntryID en el campo correspondiente para después enviarlo a la tabla al guardar. Si el usuario lo cierra antes de tiempo o le da al botón de guardar mientras el campo esta en blanco no se almacenaría. Saludos
|
|
happy
Ver perfil usuario
Enviar mensaje privado
Ver los mensajes del usuario
Visite la página de los usuarios
Añadir a la lista de amigos
Moderador Unido: 29/Enero/2005 Localización: España Estado: Sin conexión Puntos: 3192 |
Enviado: 15/Septiembre/2019 a las 23:55 |
Me he dado cuenta de que lo que te he dicho antes funcionar, funciona, pero creo que no es lo más correcto. Al hacer una copia del mensaje y no enviarlo, éste se queda en la bandeja de salida, y ese será el que luego almacenarás su EntryID. Creo que NO es una solución limpia. Lo que he pensado es que una manera "aproximada" de hacerlo sería básicamente enviar el correo e inmediatamente después ir a la bandeja de enviados y consultar el último mensaje enviado. De ese último mensaje, tomar el EntryID y ya lo tendríamos. Un ejemplo de código podría ser éste:
Esto creo que puede funcionar. Pero si estás enviando mensajes en un entorno multiusuario, con Exchange y desde una cuenta compartida, esta lógica podría tener algún punto débil, ya que otro usuarios podría enviar un mensaje de correo al mismo tiempo y "colarse" en el tiempo de espera mientras se actualiza la carpeta de enviados. Pero vamos, yo creo que es difícil que se de tanta casualidad. Aún así, puedes comprobar el asunto del mensaje de ese último mensaje enviado y si no lo fuera, seguir esperando la actualización hasta el siguiente mensaje. Espero explicarme bien ... Por cierto, el código que pongo aquí (y normalmente el que publico al dar alguna respuesta en general) NO tiene por qué ser completamente infalible. Funcionar suele funcionar, ya que normalmente lo pruebo. Pero no intento darlo todo hecho del todo. Suelen ser ideas y cosas en las que basarse para luego escribir el código que se adapte al entorno al que se dirija.
Editado por happy - 15/Septiembre/2019 a las 23:58 |
|
Saludos,
Juan M. Afan de Ribera |
|
happy
Ver perfil usuario
Enviar mensaje privado
Ver los mensajes del usuario
Visite la página de los usuarios
Añadir a la lista de amigos
Moderador Unido: 29/Enero/2005 Localización: España Estado: Sin conexión Puntos: 3192 |
Enviado: 15/Septiembre/2019 a las 22:57 |
Sí. Cuando mueves un mensaje de un lado para otro pierde ese EntryID. Me imagino que internamente no se "mueve" el mensaje, sino que se crea una copia y se coloca en la nueva ubicación. Esa copia será un nuevo elemento y por tanto tendrá un EntryID propio diferente del original. |
|
Saludos,
Juan M. Afan de Ribera |
|
valencianoblaugrana
Asiduo Unido: 20/Junio/2014 Localización: Alicante Estado: Sin conexión Puntos: 493 |
Enviado: 15/Septiembre/2019 a las 22:08 |
Quieres decir si se mueve de la bandeja de enviados?.
|
|
happy
Ver perfil usuario
Enviar mensaje privado
Ver los mensajes del usuario
Visite la página de los usuarios
Añadir a la lista de amigos
Moderador Unido: 29/Enero/2005 Localización: España Estado: Sin conexión Puntos: 3192 |
Enviado: 15/Septiembre/2019 a las 20:18 |
Si, tienes razón. Se me había olvidado que funcionaba de otra manera. En realidad debes hacer una copia del MailItem original, guardar la copia y almacenar el EntryID de la copia. Luego ya te funcionará como se espera. Por ejemplo:
luego ya podrás acceder al EntryID almacenado y mostrar el mensaje o lo que sea. Recuerda que si el mensaje se mueve de carpeta, entonces el EntryID almacenado ya no será válido (Outlook habrá creado otro EntryID y ya no servirá el anterior)
|
|
Saludos,
Juan M. Afan de Ribera |
|
valencianoblaugrana
Asiduo Unido: 20/Junio/2014 Localización: Alicante Estado: Sin conexión Puntos: 493 |
Enviado: 15/Septiembre/2019 a las 19:11 |
Perdona, pero mis conocimientos de vba son muy limitados. Lo estoy recuperando después de enviar el mensaje justo después de la propiedad msg.send pongo MSGBOX msg.entryID para que me muestre el indentificador pero me dice que que se eliminó y cambió de ubicación. Si lo pongo antes me dice que no se encuentra.
Gracias
|
|
happy
Ver perfil usuario
Enviar mensaje privado
Ver los mensajes del usuario
Visite la página de los usuarios
Añadir a la lista de amigos
Moderador Unido: 29/Enero/2005 Localización: España Estado: Sin conexión Puntos: 3192 |
Enviado: 15/Septiembre/2019 a las 18:11 |
Cuando envias el correo supongo que utilizas un objeto MailItem de Outlook no? Pues una vez enviado y antes de que se destruya el objeto o se cree otra instancia referenciando un nuevo correo recuera la propiedad EntryID del objeto y lo almacenas en esa tabla junto con el resto de datos del mensaje enviado.
|
|
Saludos,
Juan M. Afan de Ribera |
|
Responder | Página 12> |
Tweet
|
Ir al foro | Permisos de foro Usted No puede publicar nuevos temas en este foro Usted No puede responder a temas en este foro Usted No puede borrar sus mensajes en este foro Usted No puede editar sus mensajes en este foro Usted No puede crear encuestas en este foro Usted No puede votar en encuestas en este foro |