Macro en Outloock para abrir libro Excel y ejecutar macro

Por necesidad debo usar un código en Outloock, el cual abre un libro excel determinado y ejecuta la macro "formulario" que se encuentra dentro de este libro. El problema es que si el libro se encuentra abierto, abre una copia de este. Lo que deseo es que si el libro se encuentra abierto solo lo active y ejecute la macro "formulario".

El código que tengo es:

Sub Abre()
      Dim XL As Object
      Set XL = CreateObject("Excel.Application")
      XL.Visible = True
      XL.Workbooks.Open "C:\Users\fmilla\Desktop\OBRA_PILOTO V3 - copia.xlsm"
      XL.Run "formulario"
End Sub

1 Respuesta

Respuesta
1

Te anexo la macro actualizada

Sub Abrir()
'Act.Por.Dante Amor
    Set XL = GetObject(, "Excel.Application")
    XL.Visible = True
    '
    nombre = "OBRA_PILOTO V3 - copia.xlsm"
    For Each libro In XL.Workbooks
        If libro.Name = nombre Then
            existe = True
            Exit For
        End If
    Next
    If existe Then
        XL.Run "formulario"
    Else
        XL.Workbooks.Open "C:\Users\fmilla\Desktop\" & nombre
        XL.Run "formulario"
    End If
End Sub

Prueba y me comentas.

S a l u d o s . D a n t e   A m o r

Si es lo que necesitas.

Gracias Dante, salta el siguiente error:

"Se ha producido el error 429 en tiempo de ejecución. El componente ActiveX no puede crear el objeto"

Al depurar se detiene en:

Set xl = GetObject(, "Excel.Application")

Quizá tenga que ver con la declaración de la variable...

Me funciona bien en la versión 2007.

Qué versión tienes de office, ¿de outlook y de excel?

Tengo Office 2010 y también uso en otra PC Office 2013, en ambos se presenta el mismo error.

Esto no funciona para la 2010

Set xl = GetObject(, "Excel.Application")


Prueba con esta macro, va una función para verificar si el archivo está abierto. Copia todo en el módulo:

Function IsWorkBookOpen(FileName As String)
'referencia: http://stackoverflow.com/questions/11240058/check-to-see-if-excel-is-open-from-another-office-2010-app
    Dim ff As Long, ErrNo As Long
    On Error Resume Next
    ff = FreeFile()
    Open FileName For Input Lock Read As #ff
    Close ff
    ErrNo = Err
    On Error GoTo 0
    Select Case ErrNo
        Case 0:    IsWorkBookOpen = False
        Case 70:   IsWorkBookOpen = True
        Case Else: Error ErrNo
    End Select
End Function
'
Sub Abrir3()
'Act.Por.Dante Amor
    Dim XL As Object
    Dim nombre As String
    '
    ruta = "C:\Users\fmilla\Desktop\"
    nombre = "OBRA_PILOTO V3 - copia.xlsm"
    '
    ret = IsWorkBookOpen(ruta & nombre)
    If ret Then
        Set XL = GetObject(ruta & nombre).Application
        XL.Visible = True
        XL.Run "formulario"
    Else
        Set XL = CreateObject("Excel.Application")
        XL.Visible = True
        XL.Workbooks.Open ruta & nombre
        XL.Run "formulario"
    End If
End Sub

Si te funciona, no olvides valorar la respuesta.

Excelente!!.. solo un detalle: Cuando abre el archivo y ejecuta la macro (que es un userform) veo el formulario por encima del outloock (primer plano), que es lo que quiero, pero cuando el archivo ya está abierto y ejecuta la macro, el formulario se encuentra en segundo plano, debo hacer click al excel desde la barra de tareas. ¿Hay forma de solucionar eso?. Si se complica igual quedaré muy agradecido, ya que me ayudaste mucho..

Debe ser por la versión, en la 2007, en ambos casos me pone el formulario en primer plano.

Además en las instrucciones para ejecutar la macro, no existe el parámetro para la ventana, por ejemplo, en con esta instrucción (Shell), si puedes indicarle en cuál plano quieres la nueva ventana:

Recuerda valorar la respuesta.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas