Imprimir página | Cerrar ventana

CreateObject("Outlook.Application")

Impreso de: Foro de Access y VBA
Categoría: Access y VBA
Nombre del foro: Access y VBA
Descripción del foro: Foro de programacion en Access (Con código y sin código)
URL: http://www.mvp-access.com/foro/forum_posts.asp?TID=86893
Fecha de impresión: 26/Marzo/2026 a las 20:58


Tema: CreateObject("Outlook.Application")
Publicado por: rocjfl-b
Asunto: CreateObject("Outlook.Application")
Fecha de publicación: 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



Respuestas:
Publicado por: Mihura
Fecha de publicación: 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.

http://www.accessaplicaciones.com" rel="nofollow - Access Aplicaciones
http://www.tecsys.es" rel="nofollow - Tecsys.es


Publicado por: rocjfl-b
Fecha de publicación: 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.



Publicado por: Mihura
Fecha de publicación: 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.

http://www.accessaplicaciones.com" rel="nofollow - Access Aplicaciones
http://www.tecsys.es" rel="nofollow - Tecsys.es


Publicado por: rocjfl-b
Fecha de publicación: 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.







Publicado por: joanka
Fecha de publicación: 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




Publicado por: rocjfl-b
Fecha de publicación: 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.



Publicado por: joanka
Fecha de publicación: 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.


Publicado por: rocjfl-b
Fecha de publicación: 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.



Imprimir página | Cerrar ventana