Es posible tener el Contro de IE desde Access? |
Responder |
Autor | |
Jose35
Habitual Unido: 05/Noviembre/2017 Localización: Aljaraque Estado: Sin conexión Puntos: 111 |
Tema: Es posible tener el Contro de IE desde Access? Enviado: 15/Julio/2019 a las 14:10 |
Necesito tener el control de las ventanas de iExplorer que abro desde Access para poder cerrarlas de manera selectiva, ¿es posible?.
Me explico mejor.... Por motivos de seguridad y aplicaciones que usamos, todo super-rentringido, capado y controlado, en mi trabajo usamos ie11, me ocurre que si desde access abro una ventana de iExplorer, solo la puedo cerrar dandole al aspa superior. Si utilizo la siguiente funcion que tengo implantada y la que hago llamadas Function AbreUrlB(Url) Dim web1 As Object On Error Resume Next Set web1 = CreateObject("InternetExplorer.Application") With web1 .Visible = False .navigate (Url) Sleep (1000) .Quit End With Set web1 = Nothing End Function Da igual que sea el .visible= false o que este el .Quit, la abre y no la cierra. Hay ventanas de iExplorer que lanzo para sacar datos de la pagina o aplicaciones web con las que trabajo, que una vez abiertas y extraido los datos me gustaria que se cerraran automaticamente desde access sin tener que dar yo a la aspa de cerrado. ¿Es posible?, no se como hacerlo, ni lo encuentro, por cierto no puedo usar Firefox o Edge ni Crhome (por motivos de seguridad) y por incompatibilidad con esas mismas aplicaciones de las que tengo que sacar los datos. Un Saludo. Editado por Jose35 - 15/Julio/2019 a las 14:10 |
|
mounir
Colaborador Unido: 09/Febrero/2009 Localización: Asturias-España Estado: Sin conexión Puntos: 6479 |
Enviado: 15/Julio/2019 a las 16:08 |
Hola!
Este código cierra todas la ventanas abiertas de IE:
|
|
Un Saludo.
|
|
Jose35
Habitual Unido: 05/Noviembre/2017 Localización: Aljaraque Estado: Sin conexión Puntos: 111 |
Enviado: 15/Julio/2019 a las 17:21 |
Gracias Mounir, pero como he dicho necesito ser selectivo y cerrar lo que abro y ya no necesito, no puedo cerrar todo, sino me llevaría toda la mañana abriendo las aplicaciones, casi todas con las que trabajamos son de nuestra intranet.
|
|
lbauluz
Ver perfil usuario
Enviar mensaje privado
Ver los mensajes del usuario
Visite la página de los usuarios
Añadir a la lista de amigos
Administrador Unido: 29/Marzo/2005 Localización: La Gloria Estado: Sin conexión Puntos: 3861 |
Enviado: 16/Julio/2019 a las 03:26 |
Prueba algo así
function AbreUrlB(Url) Dim web1 As Object On Error Resume Next Set web1 = CreateObject("InternetExplorer.Application") web1.Visible = False web1.navigate (Url) Do While web1.Busy DoEvents Loop web1.Quit Set web1 = Nothing DoEvents End Function CREO que lo que te falta es la espera a que IE esté libre (bucle do while busy) luis
|
|
El Búho es un pajarraco
|
|
guarracuco
Moderador Unido: 24/Abril/2004 Localización: EEUU Estado: Sin conexión Puntos: 3239 |
Enviado: 16/Julio/2019 a las 06:40 |
Puedes colocar al inicio del formulario Dim WithEvents IE As SHDocVw.InternetExplorer y obtener todos los eventos del objeto. luego, un evento para abrir una ventana IE: --> Dim strUrl As String If IsObject(IE) Then Set IE = Nothing End If Set IE = CreateObject("InternetExplorer.Application") scope = "com.intuit.quickbooks.accounting" response_type = "code" redirect_uri = "http://localhost/quickbook/redirecturl/oauth.php" strUrl = "https://appcenter.intuit.com/connect/oauth2?client_id=" + client_id + "&scope=" + scope + "&response_type=" _ + response_type + "&redirect_uri=" + redirect_uri + "&state=none" IE.Navigate strUrl IE.Visible = True Do While IE.Busy Me.Caption = "Please, wait..." Loop <-- Yo utilizo el evento Title_change para controlar y/o saber en donde esta la ejecucion: Private Sub IE_TitleChange(ByVal text As String) On Error GoTo lbl_err If InStr(1, text, "http://localhost/quickbook/redirecturl/oauth.php?state=none&code=", vbTextCompare) > 0 Then 'Debug.Print text Dim arr arr = Split(text, "&") If IsArray(arr) Then For i = 0 To UBound(arr) - 1 arr2 = Split(arr(i), "=") If IsArray(arr2) Then If arr2(0) = "code" Then strData = arr2(1) End If End If Next Else MsgBox "bad server response" Exit Sub End If IE.Visible = False IE.Quit Set IE = Nothing 'Debug.Print "the code is:" + strData 'solicitar el token con la autorizacion (code) recibida. este es el paso 4 ' descrito en la URL: https://docs.connect.squareup.com/api/oauth/?q=token#post-token getToken (strData) End If lbl_exit: Exit Sub lbl_err: MsgBox Err.Description Resume lbl_exit End Sub Este ejemplo es parte de una conexion a Quickbook con OAuth2, y llamadas a su REST API. |
|
Jose35
Habitual Unido: 05/Noviembre/2017 Localización: Aljaraque Estado: Sin conexión Puntos: 111 |
Enviado: 16/Julio/2019 a las 08:16 |
Buenos Dias.
Ibauluz!!, con lo que me has escrito: Do While web1.Busy DoEvents Loop se me queda en ejecucion, vamos en bucle y no continua el programa, tengo que terminar la ejecucion desde VBA. Guarracuco!!, con lo de colocar al inicio del formulario la linea que me indicas "Dim WithEvents IE As SHDocVw.InternetExplorer" no te entiendo muy bien, pero vamos que la ponga en el formulario donde se declaran las variables si te refieres a eso con "el principio del formulario" o dentro de la rutina que tengo creada para hacer lo que quiero hacer, da error de macro y no funciona y eso es ya solo añadiendo esa linea, por no decir que no entiendo demasiado tus lineas aunque si intuyo lo que indicas. Saludos. |
|
happy
Ver perfil usuario
Enviar mensaje privado
Ver los mensajes del usuario
Visite la página de los usuarios
Añadir a la lista de amigos
Moderador Unido: 29/Enero/2005 Localización: España Estado: Sin conexión Puntos: 3192 |
Enviado: 16/Julio/2019 a las 12:26 |
El código que se está poniendo aquí son rutinas o trozos de rutinas de ejemplo que tú deberías personalizar para lo que necesitas. Por ejemplo, el código que escribió mounir te podría servir perfectamente si simplemente le agregas una o dos líneas que puedan servir para localizar la o las pestañas concretas que quieras cerrar. Pongo aquí una muestra por si quisieras cerrar una pestaña cuya URL sea https://www.facebook.com/ (la página de entrada a facebook)
Espero que te sirva
|
|
Saludos,
Juan M. Afan de Ribera |
|
happy
Ver perfil usuario
Enviar mensaje privado
Ver los mensajes del usuario
Visite la página de los usuarios
Añadir a la lista de amigos
Moderador Unido: 29/Enero/2005 Localización: España Estado: Sin conexión Puntos: 3192 |
Enviado: 16/Julio/2019 a las 12:47 |
Aprovechando el título que se le ha dado a esta pregunta "Es posible tener el control ..." me gustaría comentar, tanto para este hilo en concreto como para otros hilos en los que se preguntan cosas parecidas para controlar el internet explorer, que sí es posible tener el control de Internet Explorer (y de otros navegadores como Firefox, etc) desde VBA. Pero ... tener el control del internet explorer, NO quiere decir que vayas con eso a controlar lo que hay dentro de él. Internet Explorer o cualquier otro navegador es una aplicación que mayormente se utiliza para "contener" documentos HTML, es decir páginas o aplicaciones o portales, etc WEB. Normalmente, cuando alguien quiere controlar el navegador de internet, no es que se quiera controlar el mismo navegador, sino una o más páginas web que se pueden llamar y visualizar desde ese navegador. La estructura de las páginas web se crea a partir de los siguientes elementos (muy básicamente explicado): - uno o más documentos HTML (ficheros de texto diseñados a base de etiquetas o tags HTML) - uno o más ficheros CSS (Cascade Style Sheet, traducido como "hojas de estilo", que es donde se resumen propiedades y comportamientos de las etiquetas HTML, redefinidas como clases CSS) - uno o más ficheros adjuntos o vinculados de algún tipo de lenguaje Script (Javascript, VBScript, etc), donde se definan funciones que controlen la interacción entre el usuario y la parte de cliente del sitio web - otras cosas ... De todos estos elementos, el documento HTML es el único imprescindible, ya que tanto los estilos CSS como las funciones del lenguaje de SCript son opcionales y pueden estar contenidos en el documento HTML. ¿Por qué me enrollo explicando esto? Pues es simplemente para explicar lo que decía antes. Tener el control del navegador no quiere decir que puedas controlar lo que contiene. Para poder controlar lo que contiene el explorador web se debe, primero, conectar o instanciar el objeto del navegador (IE, Firefox, Chrome) y después a partir de ese objeto, conectar con el objeto Document, que ya será la página web que esté dentro de esa ventana o pestaña del navegador. Pero cada página web es diferente. Para poder controlarla se deberá estudiar su estructura (etiquetas o controles HTML), estudiar el estilo CSS (comportamientos de las etiquetas o controles) e incluso estudiar o localizar al menos, las rutinas Script, que se necesite utilizar para que la página haga lo que se desee, mediante código. Es decir, cada página o portal web que se quiera controlar necesitará de un estudio previo particular. Espero que sirva un poco de ayuda a los que estén interesados ...
Editado por happy - 16/Julio/2019 a las 12:54 |
|
Saludos,
Juan M. Afan de Ribera |
|
Jose35
Habitual Unido: 05/Noviembre/2017 Localización: Aljaraque Estado: Sin conexión Puntos: 111 |
Enviado: 16/Julio/2019 a las 13:02 |
Gracias happy por la aclaracion, lo que pretendo es eso, controlar determinadas paginas que tengo que lanzar para extraer sus datos, pues las leo su contenido HTML y extraigo lo que necesito, una vez extraido si consigo cerrarlas automaticamente pues ideal.
Voy a probar ahora lo ultimo que has puesto, ya os contare..... Saludos. |
|
Jose35
Habitual Unido: 05/Noviembre/2017 Localización: Aljaraque Estado: Sin conexión Puntos: 111 |
Enviado: 16/Julio/2019 a las 13:50 |
Muy buenas casi lo tengo conseguido, ya cierro la ventana en concreto que queria cerrar, pero la rutina da fallo en la linea que ahora os indicare, da el error despues del primer Next, la primera vez que pasa por ella no da error.
la linea es esta: If TypeName(IE.Document) = "HTMLDocument" Then y el error es este: Se ha producido el error ‘2147467259(80004005)’ en tiempo de ejecución Error en el método ‘Document’ de objeto IWebBrowser2’ Creo que es por que como bien dices recorre todas las ventanas del explorador abiertas, sean de explorador o de internet, y cuando llega a la 2 que entiendo que no es una ventana de explorador de internet da error, si la anulo no pasa nada, pero ya puestos me gustaria que saltara las que son de explorador de windows. Saludos. |
|
happy
Ver perfil usuario
Enviar mensaje privado
Ver los mensajes del usuario
Visite la página de los usuarios
Añadir a la lista de amigos
Moderador Unido: 29/Enero/2005 Localización: España Estado: Sin conexión Puntos: 3192 |
Enviado: 16/Julio/2019 a las 14:37 |
Ese error podría ser también porque no se accede correctamente a la librería de objetos de HTML. Pero la verdad es que no lo se muy bien, sinceramente. Es posible que se encuentre con un tipo de ventana que simplemente no contemple el objeto Document ... En todo caso, obvia el error y contrólalo de otra manera. Siguiendo con el ejemplo de antes
A ver si eso te funciona ... (si no, ves probando tú cosas, que si no, te lo vamos a dar todo hecho)
|
|
Saludos,
Juan M. Afan de Ribera |
|
lbauluz
Ver perfil usuario
Enviar mensaje privado
Ver los mensajes del usuario
Visite la página de los usuarios
Añadir a la lista de amigos
Administrador Unido: 29/Marzo/2005 Localización: La Gloria Estado: Sin conexión Puntos: 3861 |
Enviado: 17/Julio/2019 a las 02:42 |
Si pones todo a mano (abrir el explorador y la url), ¿funciona?, porque a mi me funciona en todos los casos (salvo Wait, pero eso es otro tema)
Con tu función original me funciona Function AbreUrlB(Url) Dim web1 As Object On Error Resume Next Set web1 = CreateObject("InternetExplorer.Application") With web1 .Visible = False .navigate (Url) Application.Wait Now + TimeValue("00:00:100") ' Just in case .Quit End With Set web1 = Nothing End Function Sub xx() AbreUrlB "http://www.mvp-access.com" End Sub Solo he cambiado Wait por Application.Wait (y 100 en lugar de 1000)
|
|
El Búho es un pajarraco
|
|
Jose35
Habitual Unido: 05/Noviembre/2017 Localización: Aljaraque Estado: Sin conexión Puntos: 111 |
Enviado: 17/Julio/2019 a las 07:56 |
Buenas Ibauluz, es verdad que la funcion original funciona y por eso la tengo, pero funciona en mi casa y con el iExplorer que yo tengo en mi PC, cuando lo hago desde el curro no funciona, debe ser debido a temas de permisos o cualquier historia que aqui tengan capada, ya te digo que si algo puedes estar capado, aqui lo esta, jaja.
Al final, como ademas esa solucion si funciona aqui en mi trabajo, me quedo con la solucion aportada por happy, aunque los ultimos cambios que me ha añadido tambien fallan. la dejo asi: Public Sub CerrarIE() Dim Shell As Object Dim IE As Object Set Shell = CreateObject("Shell.Application") For Each IE In Shell.Windows If IE.LocationURL = Url Then IE.Quit Exit For End If Next End Sub Editado por Jose35 - 17/Julio/2019 a las 08:00 |
|
Jose35
Habitual Unido: 05/Noviembre/2017 Localización: Aljaraque Estado: Sin conexión Puntos: 111 |
Enviado: 19/Julio/2019 a las 13:05 |
Este hilo se puede cerrar, me quedo con lo ultimo que puse y que funciona.
Gracias. |
|
Responder | |
Tweet
|
Ir al foro | Permisos de foro Usted No puede publicar nuevos temas en este foro Usted No puede responder a temas en este foro Usted No puede borrar sus mensajes en este foro Usted No puede editar sus mensajes en este foro Usted No puede crear encuestas en este foro Usted No puede votar en encuestas en este foro |