Outlook en primer plano

Flomen -  
RV71 Mensajes publicados 620 Fecha de registro   Estado Miembro Última intervención   -
Hola,

Mi problema:

A través de un botón en Access, preparo un correo que envío .display o .send en VBA.
Todo funciona correctamente.

Sin embargo, Outlook se abre en segundo plano, ¡la aplicación Access permanece en primer plano! Me gustaría que Outlook pasara a primer plano después de enviar el comando .display o .send

¿Tienes la solución?

Gracias

Configuración: Android / Chrome 81.0.4044.96

18 respuestas

  1. yg_be Mensajes publicados 23437 Fecha de registro   Estado Colaborador Última intervención   Embajador 1 588
     
    Hola, nos permitirás ayudarte mejor mostrándonos tu código.
    0
    1. yg_be Mensajes publicados 23437 Fecha de registro   Estado Colaborador Última intervención   1 588
       
      ¿Podría ser que tu código VBA haga que Access vuelva al primer plano?
      0
  2. flomen
     
    Bonjour,
    Aquí está mi código que funciona muy bien, sin embargo, no logro poner Outlook en primer plano.

    Gracias por tu ayuda

    Mi código:

    Function EnvViaOutlook(DestMail As String, CCMail As String, SujetMail As String, TxtMail As String, Signature As String, Optional PJ1 As String) As String
    Dim OL As Outlook.Application, mi As Outlook.MailItem
    On Error GoTo OLMailErr
    Set OL = New Outlook.Application
    Set mi = OL.CreateItem(olMailItem)
    With mi
    .To = DestMail
    .CC = CCMail
    .Subject = SujetMail
    .Body = TxtMail
    .HTMLBody = "Test <b>Signature<\b>" & "<br>" & .HTMLBody
    .Display
    End With
    Set mi = Nothing: Set OL = Nothing
    Exit Function
    OLMailErr:
    MsgBox "Error: " & Err.Number & vbCrLf & Err.Description
    Exit Function
    End Function
    0
    1. yg_be Mensajes publicados 23437 Fecha de registro   Estado Colaborador Última intervención   1 588
       
      ¿Cómo utilizas esta función? Quizás sea después de haberla llamado que Access hace algo y regresa al primer plano.
      0
  3. flomen
     
    Hola,
    En una función, llamo a esta función para crear un correo y luego mostrarlo (.Display) para que el usuario pueda adaptarlo.
    Puedes probar con el código que he adjuntado.
    Gracias
    0
  4. RV71 Mensajes publicados 620 Fecha de registro   Estado Miembro Última intervención   31
     
    Hola,

    puedes probar este código directamente en un evento de un botón, para ver...

     Private Sub botonTest_Click() Dim OL As Outlook.Application, mi As Outlook.MailItem On Error GoTo OLMailErr Set OL = New Outlook.Application Set mi = OL.CreateItem(olMailItem) With mi .To = DestMail .CC = CCMail .Subject = SujetMail .Body = TxtMail .HTMLBody = "Test <b>Firma<\b>" & "<br>" & .HTMLBody .Display End With Set mi = Nothing: Set OL = Nothing Exit Sub OLMailErr: MsgBox "Error : " & Err.Number & vbCrLf & Err.Description Exit Sub End Sub 
    0
  5. flomen
     
    Hola,
    Tu solución no cambia nada, es exactamente el mismo código con Function reemplazado por SUB
    Si tienes Access, puedes darte cuenta probando este código, solo falta el comando para poner Outlook en primer plano
    Gracias
    0
    1. f894009 Mensajes publicados 17417 Fecha de registro   Estado Miembro Última intervención   1 717
       
      Hola a todos,

      He estado siguiendo esta solicitud desde el principio y como otros se ocupaban de ello, he dejado de lado momentáneamente.
      flomen:
      He probado tu código en Access y no hay problema, Outlook está bien en primer plano con .display. Lo cual es normal. Hago esto con frecuencia, principalmente con Excel para probar el contenido de los correos a enviar, pero eso no cambia nada en el asunto.
      0
    2. yg_be Mensajes publicados 23437 Fecha de registro   Estado Colaborador Última intervención   1 588
       
      Creo que no tiene sentido poner Outlook en primer plano, porque ya está en primer plano en el momento del .display. Access vuelve a primer plano después, tal vez debido a una acción hecha en la función que lo llama.
      ¿Puedes compartir tu archivo?
      0
    3. yg_be Mensajes publicados 23437 Fecha de registro   Estado Colaborador Última intervención   1 588
       
      ¿Has probado la sugerencia de RV71 (a través de un simple botón)?
      0
  6. flomen
     
    Hola,
    ¿Qué quieres decir con Un simple botón?
    Estoy probando con un botón en el que he puesto la ejecución del código en el evento clic
    Mira el código y dime qué hay que modificar o si tienes otro código para mostrar un correo antes de enviarlo
    Gracias
    0
    1. yg_be Mensajes publicados 23437 Fecha de registro   Estado Colaborador Última intervención   1 588
       
      ¿Puedes compartir tu archivo?
      0
  7. flomen
     
    Hola,
    No entiendo tu solicitud: ¿Puedes compartir tu archivo?
    ¿De qué archivo se trata?
    0
  8. RV71 Mensajes publicados 620 Fecha de registro   Estado Miembro Última intervención   31
     
    ¿Has intentado poner el código en un botón?

    Porque yo lo hice (sin pasar por una función) y funciona.

    Como dice yg_be, comparte tu base de datos (quitando los datos estrictamente confidenciales), utilizando por ejemplo https://fr.fromsmash.com/

    ¡Hasta luego!
    0
  9. flomen
     
    Hola,
    No funciona "SUB" y "FUNCTION"
    Tengo una mini base de 692 K, ¿cómo puedo compartirla con ustedes?
    0
  10. flomen
     
    Acabo de compartir la base Access, aquí está el enlace https://www.cjoint.com/c/JDup5xiHoxP

    Gracias por su ayuda.
    0
    1. yg_be Mensajes publicados 23437 Fecha de registro   Estado Colaborador Última intervención   1 588
       
      He probado con tu archivo, y el mensaje aparece en primer plano.
      He probado con Outlook abierto ya, o no: mismo comportamiento.
      0
  11. flomen
     
    ¡Gracias por tu ayuda,
    Acabo de intentar con la base que corregiste (3 referencias), pero desafortunadamente sigue sin funcionar.
    Para información, estoy usando Office 2013 y Windows 10.

    ¡De nuevo gracias, quizás tengas otra solución!
    0
    1. flomen
       
      Tengo otra pregunta, con este método puedo crear un correo y enviarlo, sin embargo, me gustaría insertar la firma tal como está definida en Outlook, no he encontrado la solución
      Gracias
      0
      1. flomen > f894009 Mensajes publicados 17417 Fecha de registro   Estado Miembro Última intervención  
         
        Gracias, funciona perfectamente, pude integrar un logo (jpg) en la firma con código html.
        0
  12. RV71 Mensajes publicados 620 Fecha de registro   Estado Miembro Última intervención   31
     
    Hola,

    sinceramente estoy perdido, ya que funciona en mi máquina (win7 + office 2013 32 bits).

    ¿Puedes probar la base en otra máquina?

    ¡Hasta luego!
    0
  13. RV71 Mensajes publicados 620 Fecha de registro   Estado Miembro Última intervención   31
     
    He probado abriendo Outlook antes, también funciona, quizás por eso funcionará en tu caso.
    Sin embargo, es un desastre, porque en caso de que cambie la versión de Outlook, habrá que modificar el VBA...

    Mira el archivo modificado aquí --> https://www.cjoint.com/c/JDvmTYg3xgU
    0
    1. flomen
       
      Efectivamente, con este método funciona, si el usuario envía varios correos, con este método, cada vez abrimos una nueva sesión de Outlook, ¡así que muchas sesiones abiertas!
      Gracias por todo el tiempo.
      0
      1. RV71 Mensajes publicados 620 Fecha de registro   Estado Miembro Última intervención   31 > flomen
         
        ¿Cómo es eso?

        Si cierra Outlook, la sesión se cierra, ¿no?

        ¡Hasta luego!
        0
      2. flomen > RV71 Mensajes publicados 620 Fecha de registro   Estado Miembro Última intervención  
         
        Cuando digo varias sesiones, me refiero a todas las sesiones abiertas en cada envío de correo, ¿tal vez podríamos cerrar la sesión de Outlook que tenemos abierta? El hecho de enviar el correo cierra la ventana del correo, pero no Outlook.
        0
  14. RV71 Mensajes publicados 620 Fecha de registro   Estado Miembro Última intervención   31
     
    Dado que la ventana de Outlook está delante de la de Access, el usuario tendrá que cerrarla para volver a Access, a menos que decida minimizarla, pero este no es el comportamiento habitual.

    De lo contrario, sí, se puede cerrar el proceso de Outlook (si existe) antes de iniciar la creación del correo...
    0
  15. RV71 Mensajes publicados 620 Fecha de registro   Estado Miembro Última intervención   31
     
    Pero eso no explica por qué no funciona sin el shell...

    ¿Tienes Outlook definido como programa predeterminado?

    A+
    0
    1. yg_be Mensajes publicados 23437 Fecha de registro   Estado Colaborador Última intervención   1 588
       
      en mi casa, Outlook no está definido como programa predeterminado para correos electrónicos, y todo funciona bien con el archivo de inicio de flomen.
      0
    2. flomen
       
      ¿Tienes el código para cerrar Outlook, lo que me permitiría usar tu método: Abrir Outlook con el código que me diste, enviar el correo y, para terminar, cerrar Outlook para evitar tener sesiones acumuladas?
      0
    3. flomen > yg_be Mensajes publicados 23437 Fecha de registro   Estado Colaborador Última intervención  
       
      No, no estaba definido por defecto, lo definí por defecto pero ¡no cambia nada!
      Hice una prueba en un segundo ordenador, ¡mismo problema! ¡Outlook siempre se oculta!
      0
    4. RV71 Mensajes publicados 620 Fecha de registro   Estado Miembro Última intervención   31 > flomen
       
      No se puede saber en Access lo que el usuario ha hecho en Outlook, por lo que no se puede determinar cuándo cerrarlo.
      Access ya no tiene control cuando el usuario está escribiendo su mensaje en Outlook.
      Hay que:
      1/ verificar si Outlook está abierto
      2/ si está abierto, cerrarlo
      3/ relanzar Outlook con el código

      Pero sigo convencido de que el 99% de los usuarios cierran Outlook para volver a Access...
      0
    5. Flomen > RV71 Mensajes publicados 620 Fecha de registro   Estado Miembro Última intervención  
       
      Hola,
      Sigo buscando una solución,
      no soy el único que tiene el problema, ver:

      https://www.commentcamarche.net/foro/affich-34949745-forcer-la-fenetre-d-envoi-outlook-en-premier-plan-access-2013-16

      He hecho la prueba en otro ordenador después de reinstalar Windows 10 y Office 2013, ¡sigue el problema!
      Donde tengo dudas es en Windows 10 porque tú me dices que funciona, la diferencia es que tú estás en Windows 7.
      Voy a ver si puedo reinstalar un Windows 7.
      Gracias
      0
  16. RV71 Mensajes publicados 620 Fecha de registro   Estado Miembro Última intervención   31
     
    Bueno,

    aquí está el código que hay que poner en el botón:

    Private Sub Go_Click() '--- Cerramos el Proceso Outlook --- Dim ovc As Object Dim sQuery As String Dim oproc Set ovc = GetObject("winmgmts:root\cimv2") sQuery = "select * from win32_process where name='" & "Outlook.EXE" & "'" For Each oproc In ovc.execquery(sQuery) oproc.Terminate Next Set ovc = Nothing ' relanzamos outlook Dim SessionOutlook Const Chemin As String = "C:\Program Files\Microsoft Office\office15\OUTLOOK.exe" ' ---> adapta esta ruta si es necesario SessionOutlook = Shell(Chemin, 1) Dim MonOutlook As Outlook.Application Dim MonMessage As Outlook.MailItem On Error GoTo Err_envoyerMail ' ===== Inicialización ===== Set MonOutlook = CreateObject("Outlook.Application") Set MonMessage = MonOutlook.CreateItem(0) ' ===== Creación del email ===== With MonMessage .To = "menon.florent@gmail.com" .Subject = "Asunto de este correo" .Body = "Aquí el contenido del correo a enviar" ' Muestra el correo (comentar la línea para enviar el correo en segundo plano) .Display ' Envía el correo automáticamente (descomentar la línea para enviar el correo en segundo plano) '.Send End With Exit_envoyerMail: Set MonOutlook = Nothing Exit Sub Err_envoyerMail: Select Case Err.Number Case Else MsgBox "Error n°" & Err.Number & vbCrLf & "Descripción : " & Err.Description & vbCrLf & "Fuente : " & Err.Source, vbCritical, "Error" End Select Resume Exit_envoyerMail End Sub
    0