Donc, j'utilise le code VBA d'Excel pour cliquer sur un bouton de notre site Web, croyez-moi, je sais que ce n'est pas la meilleure des choses à faire, mais c'est l'option la moins répréhensible à ma disposition pour le moment.
Donc, ce choix hors du chemin, voici mon problème, je peux utiliser ce code, charger avec succès imdb.com, Google, etc. Mais lorsque je charge notre site local, je perds le contrôle de l'objet ie, je ne peux pas check readyState, je ne peux pas quitter. Voici l'erreur que je reçois . Erreur d'exécution '-2147023179 (800706b5)':
Erreur d'automatisation L'interface est inconnue.
De temps en temps, je reçois le message suivant: Erreur d'exécution '-2147417848 (80010108)':
Erreur d’automatisation .__ L’objet appelé a été déconnecté de ses clients.
En cliquant sur Debug indique le ie.readyState, j'ai également essayé de commenter cela et puis il pointe vers ie.Quit
Sub dothestuff()
Dim ie As InternetExplorer
Set ie = New InternetExplorer
ie.Visible = True
ie.Navigate "http://www.google.com/"
anerror = webload(ie)
ie.Quit
Set ie = Nothing
End Sub
Function webload(ie)
Do Until ie.ReadyState = READYSTATE_COMPLETE
DoEvents
Loop
End Function
Voici une solution rapide et facile à ce problème:
Au lieu de:
set IE = createobject("internetexplorer.application")
Utilisation:
Set IE = New InternetExplorerMedium
Pas besoin de modifier les paramètres IE
Voici ce qui se passe. Lorsque votre navigateur "saute" en interne vers une zone de sécurité différente - d'une adresse locale à une adresse inTRAnet ou à une adresse inTERnet, par exemple - IE ferme/supprime le processus en cours de IE et en ouvre une autre avec sécurité renforcée. Les anciens et nouveaux processus IE sont des processus enfants IE pour la tâche parent IE. Vous ne le voyez donc pas se produire ni en regardant le navigateur, ni en regardant le processus dans le Gestionnaire des tâches. Si vous utilisez Process Explorer (gratuit de Microsoft), vous pouvez voir que cela se produit.
Ce que vous devez faire dans ce type d’environnement est d’utiliser la solution d’Anup Upadhyay ci-dessus. Son extrait de code examine toutes les tâches IE (les parents et les enfants ne font aucune différence) et trouve le nouveau processus IE qui pointe vers l'adresse Web à laquelle le processus d'origine a été attribué. Tant que plusieurs navigateurs ne sont pas ouverts à la même adresse, le nouveau processus sera trouvé de manière fiable et se poursuivra comme prévu.
Remarque: vous devrez peut-être également utiliser l'objet InternetExplorerMedium par opposition à l'objet InternetExplorer . Il est également préférable de "tenir" une session.
Voici ma version qui est presque la même chose que celle d'Anup.
Références pour MS Office VBA:
Contrôles Internet Microsoft
Contrôles et automatisation Microsoft Shell
n
Dim IE As InternetExplorerMedium ' This object (the "medium" variety as opposed to "InternetExplorer") is necessary in our security climate
Dim targetURL As String
Dim webContent As String
Dim sh
Dim eachIE
targetURL = "[your URL here]"
Set IE = New InternetExplorerMedium
IE.Visible = False ' Set to true to watch what's happening
IE.Navigate targetURL
While IE.Busy
DoEvents
Wend
Do
Set sh = New Shell32.Shell
For Each eachIE In sh.Windows
If InStr(1, eachIE.LocationURL, targetURL) Then
Set IE = eachIE
'IE.Visible = False 'This is here because in some environments, the new process defaults to Visible.
Exit Do
End If
Next eachIE
Loop
Set eachIE = Nothing
Set sh = Nothing
While IE.Busy ' The new process may still be busy even after you find it
DoEvents
Wend
Essaye celui-là:
Set IE = GetObject("new:{D5E8041D-920F-45e9-B8FB-B1DEB82C6E5E}")
Nous avons eu ce problème en utilisant IE9. Cela est dû aux paramètres de sécurité. Il existe un paramètre appelé "Activer le mode protégé" dans l'onglet "Sécurité" de la boîte de dialogue "Options Internet" (outils ... options Internet). Chaque "zone" peut avoir un paramètre différent pour "activer le mode protégé" Nous avons décoché "activer le mode protégé" et cela a résolu notre problème. Je pense que ce qui se passe, c’est que lorsqu’on bascule vers une zone en mode protégé, IE démarre un nouveau processus permettant de gérer le trafic dans cette zone (ce qui peut tuer l’ancien processus). Lorsque cela se produit, votre variable d'objet IE dans VBA est déconnectée d'Internet Explorer.
Très bien, je viens de trouver une solution et j'ai décidé par désespoir d'essayer de charger 127.0.0.1 au lieu de localhost, bien entendu, aucun problème, donc résolu l'adresse IP du serveur intranet local, et maintenant je suis prêt à partir ..__ ne comprends pas vraiment pourquoi, mais cela a résolu mon problème.
Dim IE As Object
Set IE = CreateObject("InternetExplorer.Application")
IE.Visible = False
IE.Navigate "C:\abc.html"
"Nous obtenons une erreur ici, j'ai trouvé une petite solution alternative délicate pour cela, comme suit:" Prenez la référence pour Microsoft Shell Controls And Automation. ". Utilisez le code ci-dessous pour réaffecter un objet IE à la connexion perdue problème
Dim sh
Dim eachIE
Do
Set sh = New Shell32.Shell
For Each eachIE In sh.Windows
' Check if this is the desired URL
' Here you can use your condition except .html
' If you want to use your URL , then put the URL below in the code for condition check.
' This code will reassign your IE object with the same reference for navigation and your issue will resolve.
'
If InStr(1, eachIE.locationurl, ".html") Then
Set IE = eachIE
Exit Do
End If
Next eachIE
Loop
Pour moi, ce qui suit a fonctionné:
Ps. J'ai testé ces étapes sur le navigateur IE 8.
Une autre solution..
Set IE = CreateObject("InternetExplorer.Application")
IE.Navigate ("http://URLOnMyIntranet/site.html")
IE.Visible = True
Set IE = nothing
Set objShellApp = CreateObject("Shell.Application")
For Each objWindow In objShellApp.Windows
Debug.Print objWindow.LocationName
If LCase(objWindow.LocationName) = LCase("Your windows name, use debug to find out") Then
Set IE = objWindow
End If
Next
Notez que, si vous utilisez InternetExplorerMedium (voir les autres réponses), vous pouvez également utiliser la propriété Url obj.LocationURL au lieu du nom de la fenêtre, qui serait plus précise. Voir d'autres réponses.
Peut-être que vous rencontrez un problème de liaison? C'est une erreur étrange à obtenir pour cela.
Essayez ce code (adapté de http://www.excely.com/Excel-vba/ie-automation.shtml ). Espérons que cela aide:
Option Explicit
' lasts for the life of Excel being open
Dim ie As Object
Sub dothestuff()
Set ie = CreateObject("InternetExplorer.Application")
ie.Visible = True
ie.Navigate "http://www.google.com/"
Do While ie.Busy
DoEvents
Loop
ie.Quit
Set ie = Nothing
End Sub
Je rencontre exactement le même problème avec un site Web qui se trouve dans l'intranet de notre société et qui est également inclus dans mes sites de confiance. La désactivation du mode protégé me permet de vérifier ReadyState, mais uniquement si je désactive la zone Internet en plus des sites intranet et de confiance.
Pourquoi l'activation du mode protégé pour la zone Internet provoquerait-elle l'erreur d'automatisation lors de la vérification de ReadyState sur un site de confiance? Existe-t-il un moyen de contourner ce problème sans désactiver le mode protégé pour la zone Internet?