** NORMAS DEL FORO **
Inicio del foro Inicio del foro > Access y VBA > Access y VBA
  Mensajes nuevos Mensajes nuevos RSS - CreateObject("Outlook.Application")
  Preguntas frecuentes Preguntas frecuentes  Buscar en el foro   Eventos   Registro Registro  Iniciar sesion Iniciar sesion

CreateObject("Outlook.Application")

 Responder Responder
Autor
Mensaje
rocjfl-b Ver desplegable
Colaborador
Colaborador


Unido: 19/Abril/2006
Localización: España
Estado: Sin conexión
Puntos: 669
Opciones de entrada Opciones de entrada   Gracias (0) Gracias(0)   Cita rocjfl-b Cita  ResponderRespuesta Enlace directo a este mensaje Tema: CreateObject("Outlook.Application")
    Enviado: 22/Marzo/2024 a las 20:45
Hola a todos.

Cuando establezco una variable de objeto para el objeto Application de Outlook:
Set objOL = CreateObject("Outlook.Application")
Outlook se "...cuelga..." teniendo que utilizar el Administrador de Tareas para "...descolgarlo...".
El mensaje de windows 10, en la barra de tareas, donde aparece el icono de Outlook que indica que esta "...colgado..." es:
...Otro programa está usando outlook. Para deconectar los programas y salir de Outlook, haga clic en el icono de Outlook...."
Esto no se cumple, ya que la única manera de desbloquear Outlook es con el Administrador de Tareas.
Desbloqueado Outlook con el Administrador de Tareas, Visual da el siguiente error: ... "Se ha producido el error '-2147352567 (80020009)'" ...
Parece ser que es un Error de automatización. La automaticación de Outlook mediante Visual Basic se interrumpe.
Curiosamente, esto solo pasa con algunas máquinas ( las más antiguas de la red ).
Toda la red trabaja con windows 10 y con microsoft 365 en todos los clientes y comprobé que la versión de Visual Basic y Access 365 es la misma en todas las máquinas.

Podeis,por favor, ayudarme con esto ?...

Gracias


Editado por rocjfl-b - 22/Marzo/2024 a las 21:11
Arriba
Mihura Ver desplegable
Administrador
Administrador
Avatar

Unido: 06/Mayo/2005
Localización: En la dehesa
Estado: Sin conexión
Puntos: 14027
Opciones de entrada Opciones de entrada   Gracias (0) Gracias(0)   Cita Mihura Cita  ResponderRespuesta Enlace directo a este mensaje Enviado: 22/Marzo/2024 a las 21:46
Yo lo hago así ... y no se me cuelga.

Puedo tener la librería referenciada y lo dimensiono así:
    
    Dim oOutlook As Outlook.Application



o sin referenciar:

    Dim oOutlook  As Object       'Outlook.Application
    
    Set oOutlook = CreateObject("Outlook.Application")



Jesús Mansilla Castells.
Saludos desde Móstoles.

Access Aplicaciones
Tecsys.es
Arriba
rocjfl-b Ver desplegable
Colaborador
Colaborador


Unido: 19/Abril/2006
Localización: España
Estado: Sin conexión
Puntos: 669
Opciones de entrada Opciones de entrada   Gracias (0) Gracias(0)   Cita rocjfl-b Cita  ResponderRespuesta Enlace directo a este mensaje Enviado: 23/Marzo/2024 a las 09:16
Hola Mihura, gracias por contestar!
Yo trato de utilizarla "sin referenciar", pero como expliqué, no en todas las máquinas se "cuelga" Outlook; en algunas funciona sin problema.
Tengo la impresión que es algo relacionado con el sistema operativo, pero solo es una intuición.

Arriba
Mihura Ver desplegable
Administrador
Administrador
Avatar

Unido: 06/Mayo/2005
Localización: En la dehesa
Estado: Sin conexión
Puntos: 14027
Opciones de entrada Opciones de entrada   Gracias (0) Gracias(0)   Cita Mihura Cita  ResponderRespuesta Enlace directo a este mensaje Enviado: 23/Marzo/2024 a las 09:39
A mí me da que es problema de versiones superpuestas ...
Jesús Mansilla Castells.
Saludos desde Móstoles.

Access Aplicaciones
Tecsys.es
Arriba
rocjfl-b Ver desplegable
Colaborador
Colaborador


Unido: 19/Abril/2006
Localización: España
Estado: Sin conexión
Puntos: 669
Opciones de entrada Opciones de entrada   Gracias (0) Gracias(0)   Cita rocjfl-b Cita  ResponderRespuesta Enlace directo a este mensaje Enviado: 23/Marzo/2024 a las 10:24
Versiones superpuestas de Outlook ...  ??.   
Hay 2 versiones:  La Clásica y el Nuevo Outlook que opcionalmente puedes utilizar.  Se trabaja en la red local con la versión clásica de Outllook.







Editado por rocjfl-b - 23/Marzo/2024 a las 11:13
Arriba
joanka Ver desplegable
Habitual
Habitual


Unido: 07/Abril/2021
Localización: Lleida
Estado: Sin conexión
Puntos: 140
Opciones de entrada Opciones de entrada   Gracias (0) Gracias(0)   Cita joanka Cita  ResponderRespuesta Enlace directo a este mensaje Enviado: 23/Marzo/2024 a las 20:04
Hola,

En en outlook 365 no funcionan los códigos que funcionaban con anteriores versiones.

- Crea un Módulo:

Private Declare PtrSafe Function FindWindow Lib "user32" _
                Alias "FindWindowA" _
                (ByVal lpClassName As String, _
                ByVal lpWindowName As String) As Long

Function IsAppOpen(ClassName As String) As Boolean
    If FindWindow(ClassName, vbNullString) Then
        IsAppOpen = True
    End If
End Function

- Para enviar correo:

Dim oOutlook As Object
Dim oEmailItem As Object
Dim strbody As String

strbody = "Hola"

On Error Resume Next

Err.Clear
        If oOutlook Is Nothing Then
        Set oOutlook = GetObject(, "Outlook.Application")
        Set oOutlook = CreateObject("Outlook.Application")
        Set oEmailItem = oOutlook.CreateItem(olmailitem)
        
        End If
 
 If IsAppOpen("rctrl_renwnd32") Then
        With oEmailItem
            
            .Display
            .To = "correo@correo.com"
            '.CC =
            .Subject = ""
            
            
        End With
        
  DoCmd.Hourglass False
 
Set oEmailItem = Nothing
Set oOutlook = Nothing
      
      Else
     
         Shell "Outlook", vbNormalNoFocus
         
        With oEmailItem
            .Display
            .To = "correo@correo.com"
            '.CC =
            .Subject = ""
                        
        End With
        
 DoCmd.Hourglass False
 
 
        Set oEmailItem = Nothing
        Set oOutlook = Nothing
        
        Set rs = Nothing
        Set miBD = Nothing

End If


Arriba
rocjfl-b Ver desplegable
Colaborador
Colaborador


Unido: 19/Abril/2006
Localización: España
Estado: Sin conexión
Puntos: 669
Opciones de entrada Opciones de entrada   Gracias (0) Gracias(0)   Cita rocjfl-b Cita  ResponderRespuesta Enlace directo a este mensaje Enviado: 23/Marzo/2024 a las 23:49
El código que estoy empleando es el siguiente:

Sub EnviarCorreoConAdjunto()

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            'Destinatario
    Set OlkDestinatario = .Recipients.Add(ApCorreo)
    OlkDestinatario.Type = olTo
        .Subject = "Mayor contable"                'Asunto
        .HTMLBody = "<HTML> " & _
                "<BODY>" & _
                    "<P>" & "<IMG SRC = 'C:\temp\BaseFirmasCorreo.png'>" & "</P>" & _
                "</BODY> " & _
                "</HTML>"
        .Attachments.Add ApArchivoAdjunto
    .Display
End With

'Eliminamos la instancia
Set Olk = Nothing
Set OlkMsg = Nothing
Set OlkDestinatario = Nothing
End Sub

La "sorpresa" que encontré es que si ejecuto la esta rutina cuando Outlook está cargado, todo va bién.

El "cuelgue" de Outlook se produce cuando se ejecuta la rutina y Outlook está cerrado.

Arriba
joanka Ver desplegable
Habitual
Habitual


Unido: 07/Abril/2021
Localización: Lleida
Estado: Sin conexión
Puntos: 140
Opciones de entrada Opciones de entrada   Gracias (0) Gracias(0)   Cita joanka Cita  ResponderRespuesta Enlace directo a este mensaje Enviado: 24/Marzo/2024 a las 10:12
Publicado originalmente por rocjfl-b rocjfl-b escribió:

El código que estoy empleando es el siguiente:

Sub EnviarCorreoConAdjunto()

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            'Destinatario
    Set OlkDestinatario = .Recipients.Add(ApCorreo)
    OlkDestinatario.Type = olTo
        .Subject = "Mayor contable"                'Asunto
        .HTMLBody = "<HTML> " & _
                "<BODY>" & _
                    "<P>" & "<IMG SRC = 'C:\temp\BaseFirmasCorreo.png'>" & "</P>" & _
                "</BODY> " & _
                "</HTML>"
        .Attachments.Add ApArchivoAdjunto
    .Display
End With

'Eliminamos la instancia
Set Olk = Nothing
Set OlkMsg = Nothing
Set OlkDestinatario = Nothing
End Sub

La "sorpresa" que encontré es que si ejecuto la esta rutina cuando Outlook está cargado, todo va bién.

El "cuelgue" de Outlook se produce cuando se ejecuta la rutina y Outlook está cerrado.



Adapta tu código al que te he indicado, el código primero verifica si outlook está abierto, si está abierto prepara el mensaje, si no, abre outlook y prepara el mensaje.
Has de dimensionar las variables como Object y

Dim oOutlook As Object
Dim oEmailItem As Object
Dim strbody As String

        If oOutlook Is Nothing Then
        Set oOutlook = GetObject(, "Outlook.Application")
        Set oOutlook = CreateObject("Outlook.Application")
        Set oEmailItem = oOutlook.CreateItem(olMailItem)

Si pruebas ese código en un formulario aparte, verás que ya no tienes ese problema.
Arriba
rocjfl-b Ver desplegable
Colaborador
Colaborador


Unido: 19/Abril/2006
Localización: España
Estado: Sin conexión
Puntos: 669
Opciones de entrada Opciones de entrada   Gracias (0) Gracias(0)   Cita rocjfl-b Cita  ResponderRespuesta Enlace directo a este mensaje Enviado: 25/Marzo/2024 a las 07:05
joanka, eso hice.  Si outlook está cerrado, lo abro y mando el mensaje.  Si outlook está abierto, mando el mensaje.

Muchas gracias.

Se puede cerrar el hilo.
Arriba
 Responder Responder
  Compartir tema   

Ir al foro Permisos de foro Ver desplegable