Detectar excel desde visual Basic

Hola, tengo el siguiente problema
llamo a excel desde visual basic, utilizando Set MiApp = CreateObject("Excel.Application"), cuando finalizo las operaciones lo cierro de esta manera: MiApp.Application.Quit
Set MiLibro = Nothing
Set MiApp = Nothing
Mi problema es que cuando vuelvo a llamar a excel me aparece un libro vacío y otro con la aplicación que llamo, pero se posiciona en el libro vacío confundiendo al usuario. Traté de solucionarlo declarando la api: Declare Function FindWindow Lib "User32" Alias _
"FindWindowsA" (ByVal lpclassname As String, _
ByVal lpwindowname As Long) As Long
y utilizando la siguiente funcion:
Sub DetectExcel() ' El procedimiento detecta que Excel está en ejecución y lo registra.
Dim hWnd As Long
On Error Resume Next
Const WM_USER = 1024
hWnd = FindWindow("XLMAIN", "Excel.Application") ' Si se está ejecutando Excel, esta llamada a la API devuelve el controlador.
If hWnd = 0 Then ' 0 quiere decir que Excel no se está ejecutando .
Exit Sub
Else
SeEstaEjecutando = True
End If
End Sub
Pero siempre sale con hwnd en 0, como si no se estuviera ejecutando.
Les agradecería si alguien por favor me puede ayudar, por favor díganme que estoy haciendo mal.
Saludos
Alice

1 Respuesta

Respuesta
1
Hace unos meses me encontré con el mismo problema y aunque lo solucioné de una manera poco eficiente, me olvidé del tema hasta que he visto como lo has hecho tu.
He probado lo que has hecho y de primeras no me funcionó. Sin embargo he modificado un par de cosas en tu código y me funcionó.
Lo que he modificado es lo siguiente:
1.- He cambiado "FindWindowsA" por "FindWindowA"
2.- El segundo argumento de la API, "ByVal lpwindowname As Long" lo he declarado como "String".
3.- En la llamada que haces a la API desde la función he cambiado el segundo argumento "Excel.Application" por vbNullString
Eso ha sido más que suficiente para que tu código me funcionase, bueno al menos hwnd venia con un valor cuando había una instancia de excel abierta.
Supongo que luego tendrás que aplicar otra API que utilice el valor de hwnd.
He revisado unos links que tal vez te puedan interesar:
http://www.allapi.net/
http://www.activevb.de

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas