control de otras aplicaciones abiertas

21/01/2006 - 00:09 por diego | Informe spam
hola a todos,
necesito un procedimiento que desde VBA para excel, pueda verificar el
nombre de todas las aplicaciones activas en un momento dado.
Es decir, una macro que me diga en un momento determinado que existe la
aplicación word abierta, el access, el oultllo, alguna otra sesion de
Excel

no tengo ni idea de como lograrlo.

gracias

Preguntas similare

Leer las respuestas

#1 Héctor Miguel
21/01/2006 - 02:24 | Informe spam
hola, diego !

... procedimiento que desde VBA para excel, pueda verificar... las aplicaciones activas en un momento dado.
... una macro que me diga en un momento determinado que existe... word abierta, el access, el oultllo, alguna otra sesion de Excel...



prueba haciendo una referencia 'a posteriori' a las aplicaciones que necesites 'rastrear' [p.e.]
Sub Checar_Aplicaciones()
Dim Aplicacion, Sig As Byte, Aviso As String, App As Object
Aplicacion = Array("Access", "Outlook", "PowerPoint", "Word", "Excel")
Aviso = "Las siguientes aplicaciones estan..."
For Sig = LBound(Aplicacion) To UBound(Aplicacion)
On Error Resume Next
Set App = GetObject(, Aplicacion(Sig) & ".Application")
Aviso = Aviso & vbCr & IIf(App Is Nothing, "Ina", "A") & "ctiva" & vbTab & Aplicacion(Sig)
On Error GoTo 0
Next: Set App = Nothing
MsgBox Aviso
End Sub

o consulta la informacion en la pagina de Ole P Erlandsen...
Basic information about OLE automation
http://www.erlandsendata.no/english...eolebasics

si cualquier duda [o informacion adicional]... comentas ?
saludos,
hector.
Respuesta Responder a este mensaje
#2 diego
21/01/2006 - 11:26 | Informe spam
bueno hector miguel,
gracias por tu ayuda. lo he probado y funciona correctamente (o casi
correctamente). lo cierto es que a mi nunca se me hubiera ocurrido nada por
el estilo.
digo "casi" por que a lo mejor por error mío, la solución que me has dado me
limita un poco el objetivo que busco.
en concreto paso a describirte lo que intento aplicar:
Con una aplicacion de terceros (A), manipulo una serie de datos y esa
manipulación me genera un Libro1.xls (el cual NO necesito grabarlo en mi PC
para conseguir mis objetivos) en una sesión (o instancia de Excel). A partir
de este momento ya estoy en disposición de utilizar una aplicación B creada
por mí. para manipular ese Libro1.xls. siempre que dicha aplicación B la abra
desde la sesión en la que se encuentra este Librosx.xls. Si activo la
aplicación B e intento manipular el Libro1.xls, la cosa no funciona por que
sencillamente mi aplicación B no lo "ve".

Si yo ya tuviera una sesion de Excel previamente abierta y estuviera
utilizando en esa sesión mi aplicación B, dicho Libro1.xls se me genera y
abre (desgraciadamente para mis objetivos) en una 2ª sesión de Excel, la cual
se comporta como si la 1ª sesión no existiera. (me explico: si en la 1ª
sesion de excel tuviera 4 libros abiertos, dichos libros no aparecen cuando
se despliega el menú "ventana" de la 2ª sesión de Excel y viceversa, si
despliego el menú "ventana" de la 1ª sesión, se "ven" los libros abiertos en
esa 1ª sesión de Excel pero no se "ve", el Libro1.xls de la 2ª sesión.)
¿que ocurre entonces? Ocurre que si, en un momento dado, tuviera abiertas,
Access, Word, Powerpoint, Excel (1ª sesion) y Excel (2ª sesión).
Con el Procedimiento que me has facilitado solo se detecta la sesión desde
la que se ha ejecutado pero no la(s) otra(s) sesione(s) de Excel.
¿que intento? en el caso más complicado, lo que necesito es poder manipular
los datos de Libro1.xls con mi aplicación B independientemente de si la
activo desde cualquier sesion.
Mi petición original, era controlar las aplicaciones activas en un momento
dado, y en ese caso si "veo" una sesión de Excel, entrar dentro de ella y
verificar si el libro1.xls está abierto.
Perdona por esta tediosa explicación.

"Héctor Miguel" escribió:

hola, diego !

> ... procedimiento que desde VBA para excel, pueda verificar... las aplicaciones activas en un momento dado.
> ... una macro que me diga en un momento determinado que existe... word abierta, el access, el oultllo, alguna otra sesion de Excel...

prueba haciendo una referencia 'a posteriori' a las aplicaciones que necesites 'rastrear' [p.e.]
Sub Checar_Aplicaciones()
Dim Aplicacion, Sig As Byte, Aviso As String, App As Object
Aplicacion = Array("Access", "Outlook", "PowerPoint", "Word", "Excel")
Aviso = "Las siguientes aplicaciones estan..."
For Sig = LBound(Aplicacion) To UBound(Aplicacion)
On Error Resume Next
Set App = GetObject(, Aplicacion(Sig) & ".Application")
Aviso = Aviso & vbCr & IIf(App Is Nothing, "Ina", "A") & "ctiva" & vbTab & Aplicacion(Sig)
On Error GoTo 0
Next: Set App = Nothing
MsgBox Aviso
End Sub

o consulta la informacion en la pagina de Ole P Erlandsen...
Basic information about OLE automation
http://www.erlandsendata.no/english...eolebasics

si cualquier duda [o informacion adicional]... comentas ?
saludos,
hector.



Respuesta Responder a este mensaje
#3 Héctor Miguel
21/01/2006 - 17:13 | Informe spam
hola, diego !

a manera de 'resumen'... hasta donde se... y esperando que te sea de utilidad, algunos comentarios respecto a 'multi-sesiones' ;)

1) cuando existen 'varias' sesiones/instancias/... de una aplicacion, -simplemente- NO 'se hablan' entre ellas :-(
2) el procedimiento sugerido, SOLO 'detecta' una instancia 'aleatoria' de la aplicacion 'buscada' [no estoy seguro que sea 'la misma'] :))
incluso, habiendose detectado 'varias' instancias, no creo que podria 'activarse' alguna en especifico SIN la ayuda de algun 'truco'
[como buscar por un libro 'en concreto' que se encontrara abierto en alguna de ellas, y posiblemente el 'modo de acceso vigente']
3) si la aplicacion de terceros... 'genera' una instancia 'separada/aparte/...' de excel [cada vez que crea el LibroX.xls]
intenta a 'forzar' a que excel [aplicacion previa] ->IGNORE<- las solicitudes -remotas- de otras aplicaciones [p.e.]
a) [menu] herramientas / opciones / [ficha] general... -> MARCA la opcion de omitir [o ignorar] otras aplicaciones
=> NO te olvides de volver a 'desmarcarla'... o perderias otros 'beneficios' [como abrir archivos desde el explorador de windows] :-(
b) en el modulo de codigo de 'X' libro [suponiendo que usas un libro 'especifico' para la 'manipulacion' del LibroX.xls]...
-> en el procedimiento '_open' -> Application.IgnoreRemoteRequests = True
-> Y en el '_beforeclose -> Application.IgnoreRemoteRequests = False
despues de lo anterior... la aplicacion de terceros se vera 'obligada' a generar los libros EN LA MISMA sesion/instancia de excel ;)

si cualquier duda [o informacion adicional]... comentas ?
saludos,
hector.
=> ... en concreto... lo que intento aplicar:
Con una aplicacion de terceros (A), manipulo una serie de datos y... me genera un Libro1.xls
(el cual NO necesito grabarlo en mi PC...) en una sesion (o instancia de Excel).
A partir de... en disposicion de utilizar una aplicacion B creada por mi para manipular ese Libro1.xls
siempre que dicha aplicacion B la abra desde la sesion en la que se encuentra este Librosx.xls.
Si activo la aplicacion B e intento manipular el Libro1.xls, la cosa no funciona por que sencillamente mi aplicacion B no lo "ve".
Si yo ya tuviera una sesion de Excel previa... y... utilizando en esa sesion mi aplicacion B
dicho Libro1.xls se me genera y abre (desgraciadamente para mis objetivos) en una 2a sesion de Excel
la cual se comporta como si la 1a sesion no existiera [...]
Ocurre que si, en un momento dado, tuviera abiertas, Access, Word, Powerpoint, Excel (1a sesion) y Excel (2a sesion).
Con el Procedimiento... facilitado solo se detecta la sesion desde la que se ha ejecutado pero no la(s) otra(s) sesione(s) de Excel.
que intento?... poder manipular los datos de Libro1.xls con mi aplicacion B independientemente de... cualquier sesion.
Mi peticion... controlar las aplicaciones activas... y... si "veo" una sesion de Excel, entrar... y verificar si el libro1.xls esta abierto.
Respuesta Responder a este mensaje
#4 diego
22/01/2006 - 11:57 | Informe spam
hola hector,
por supuesto que voy a verificar si este procedimiento puede solucionarme el
problema.
te comentaré mañana Lunes en cuanto pueda emplear la aplicación de terceros
gracias

"Héctor Miguel" escribió:

hola, diego !

a manera de 'resumen'... hasta donde se... y esperando que te sea de utilidad, algunos comentarios respecto a 'multi-sesiones' ;)

1) cuando existen 'varias' sesiones/instancias/... de una aplicacion, -simplemente- NO 'se hablan' entre ellas :-(
2) el procedimiento sugerido, SOLO 'detecta' una instancia 'aleatoria' de la aplicacion 'buscada' [no estoy seguro que sea 'la misma'] :))
incluso, habiendose detectado 'varias' instancias, no creo que podria 'activarse' alguna en especifico SIN la ayuda de algun 'truco'
[como buscar por un libro 'en concreto' que se encontrara abierto en alguna de ellas, y posiblemente el 'modo de acceso vigente']
3) si la aplicacion de terceros... 'genera' una instancia 'separada/aparte/...' de excel [cada vez que crea el LibroX.xls]
intenta a 'forzar' a que excel [aplicacion previa] ->IGNORE<- las solicitudes -remotas- de otras aplicaciones [p.e.]
a) [menu] herramientas / opciones / [ficha] general... -> MARCA la opcion de omitir [o ignorar] otras aplicaciones
=> NO te olvides de volver a 'desmarcarla'... o perderias otros 'beneficios' [como abrir archivos desde el explorador de windows] :-(
b) en el modulo de codigo de 'X' libro [suponiendo que usas un libro 'especifico' para la 'manipulacion' del LibroX.xls]...
-> en el procedimiento '_open' -> Application.IgnoreRemoteRequests = True
-> Y en el '_beforeclose -> Application.IgnoreRemoteRequests = False
despues de lo anterior... la aplicacion de terceros se vera 'obligada' a generar los libros EN LA MISMA sesion/instancia de excel ;)

si cualquier duda [o informacion adicional]... comentas ?
saludos,
hector.
=> > ... en concreto... lo que intento aplicar:
> Con una aplicacion de terceros (A), manipulo una serie de datos y... me genera un Libro1.xls
> (el cual NO necesito grabarlo en mi PC...) en una sesion (o instancia de Excel).
> A partir de... en disposicion de utilizar una aplicacion B creada por mi para manipular ese Libro1.xls
> siempre que dicha aplicacion B la abra desde la sesion en la que se encuentra este Librosx.xls.
> Si activo la aplicacion B e intento manipular el Libro1.xls, la cosa no funciona por que sencillamente mi aplicacion B no lo "ve".
> Si yo ya tuviera una sesion de Excel previa... y... utilizando en esa sesion mi aplicacion B
> dicho Libro1.xls se me genera y abre (desgraciadamente para mis objetivos) en una 2a sesion de Excel
> la cual se comporta como si la 1a sesion no existiera [...]
> Ocurre que si, en un momento dado, tuviera abiertas, Access, Word, Powerpoint, Excel (1a sesion) y Excel (2a sesion).
> Con el Procedimiento... facilitado solo se detecta la sesion desde la que se ha ejecutado pero no la(s) otra(s) sesione(s) de Excel.
> que intento?... poder manipular los datos de Libro1.xls con mi aplicacion B independientemente de... cualquier sesion.
> Mi peticion... controlar las aplicaciones activas... y... si "veo" una sesion de Excel, entrar... y verificar si el libro1.xls esta abierto.



Respuesta Responder a este mensaje
#5 Manuel Romero
23/01/2006 - 20:36 | Informe spam
Una pregunta, tu aplicacion A abre el libro en una instancia creada por
ella o solamente crea el archivo de excel en un directorio determinado?

Si la instancia es creada, puedes capturar el evento WorkbookOpen del
objeto Application y si el archivo es el tuyo, abres tu aplicacion B
despues.

Si solo lo crea, con un evento OnTime en Excel verificas la existencia
del archivo y los abres cuando lo detecte.

En fin, se me ocurren estas ideas pero habria que refinarlas mas.

bueno hector miguel,
gracias por tu ayuda. lo he probado y funciona correctamente (o casi
correctamente). lo cierto es que a mi nunca se me hubiera ocurrido nada por
el estilo.
digo "casi" por que a lo mejor por error mío, la solución que me has dado me
limita un poco el objetivo que busco.
en concreto paso a describirte lo que intento aplicar:
Con una aplicacion de terceros (A), manipulo una serie de datos y esa
manipulación me genera un Libro1.xls (el cual NO necesito grabarlo en mi PC
para conseguir mis objetivos) en una sesión (o instancia de Excel). A partir
de este momento ya estoy en disposición de utilizar una aplicación B creada
por mí. para manipular ese Libro1.xls. siempre que dicha aplicación B la abra
desde la sesión en la que se encuentra este Librosx.xls. Si activo la
aplicación B e intento manipular el Libro1.xls, la cosa no funciona por que
sencillamente mi aplicación B no lo "ve".

Si yo ya tuviera una sesion de Excel previamente abierta y estuviera
utilizando en esa sesión mi aplicación B, dicho Libro1.xls se me genera y
abre (desgraciadamente para mis objetivos) en una 2ª sesión de Excel, la cual
se comporta como si la 1ª sesión no existiera. (me explico: si en la 1ª
sesion de excel tuviera 4 libros abiertos, dichos libros no aparecen cuando
se despliega el menú "ventana" de la 2ª sesión de Excel y viceversa, si
despliego el menú "ventana" de la 1ª sesión, se "ven" los libros abiertos en
esa 1ª sesión de Excel pero no se "ve", el Libro1.xls de la 2ª sesión.)
¿que ocurre entonces? Ocurre que si, en un momento dado, tuviera abiertas,
Access, Word, Powerpoint, Excel (1ª sesion) y Excel (2ª sesión).
Con el Procedimiento que me has facilitado solo se detecta la sesión desde
la que se ha ejecutado pero no la(s) otra(s) sesione(s) de Excel.
¿que intento? en el caso más complicado, lo que necesito es poder manipular
los datos de Libro1.xls con mi aplicación B independientemente de si la
activo desde cualquier sesion.
Mi petición original, era controlar las aplicaciones activas en un momento
dado, y en ese caso si "veo" una sesión de Excel, entrar dentro de ella y
verificar si el libro1.xls está abierto.
Perdona por esta tediosa explicación.

"Héctor Miguel" escribió:

hola, diego !

... procedimiento que desde VBA para excel, pueda verificar... las
aplicaciones activas en un momento dado. ... una macro que me diga en un
momento determinado que existe... word abierta, el access, el oultllo,
alguna otra sesion de Excel...



prueba haciendo una referencia 'a posteriori' a las aplicaciones que
necesites 'rastrear' [p.e.] Sub Checar_Aplicaciones()
Dim Aplicacion, Sig As Byte, Aviso As String, App As Object
Aplicacion = Array("Access", "Outlook", "PowerPoint", "Word", "Excel")
Aviso = "Las siguientes aplicaciones estan..."
For Sig = LBound(Aplicacion) To UBound(Aplicacion)
On Error Resume Next
Set App = GetObject(, Aplicacion(Sig) & ".Application")
Aviso = Aviso & vbCr & IIf(App Is Nothing, "Ina", "A") & "ctiva" & vbTab
& Aplicacion(Sig) On Error GoTo 0
Next: Set App = Nothing
MsgBox Aviso
End Sub

o consulta la informacion en la pagina de Ole P Erlandsen...
Basic information about OLE automation
http://www.erlandsendata.no/english...eolebasics

si cualquier duda [o informacion adicional]... comentas ?
saludos,
hector.



email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida