Excel VBA Controlling IE intranet local
donc, j'utilise le code VBA Excel pour cliquer sur un bouton sur 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 disponible pour moi en ce 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 quand je charge notre site local, je perds le contrôle de l'objet ie, Je ne peux pas vérifier readyState, Je ne peux pas démissionner. Voici l'erreur que j'obtiens. Erreur d'exécution '-2147023179 (800706b5)":
erreur D'automatisation L'interface est inconnue
de temps en temps je reçois plutôt ce message: Erreur d'exécution '-2147417848 (80010108)':
erreur D'automatisation L'objet invoqué s'est déconnecté de ses clients.
cliquer sur Debug indique le ie.readyState, j'ai également essayé de commenter cela et puis il pointe à ie.Quittez
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
10 réponses
au Lieu de:
set IE = createobject("internetexplorer.application")
Utilisation:
Set IE = New InternetExplorerMedium
Aucun besoin d'ajuster les paramètres d'internet explorer
Voici ce qui se passe. Lorsque votre navigateur interne "saute" à une zone de sécurité différente - d'une adresse locale à une adresse inTRAnet ou à une adresse inTERnet - IE ferme/laisse tomber le processus actuel de IE et en ouvre une autre avec une sécurité plus étroite. L'ancien et le nouveau processus IE sont des processus enfants IE pour la tâche IE parent donc vous ne le voyez pas se produire en regardant le navigateur ou en regardant le processus dans le Gestionnaire de tâches. Si vous utilisez Process Explorer (sans Microsoft), vous je peux le voir arriver.
ce que vous devez faire dans ce type d'environnement est d'utiliser la solution D'Anup Upadhyay ci-dessus. Son code snippet examine toutes les tâches IE (parent et enfant ne fait pas de différence) et trouve le nouveau processus IE qui pointe vers l'adresse web que le processus original a été donné. Tant que vous n'avez pas plusieurs navigateurs ouverts à la même adresse, il va trouver le nouveau processus de manière fiable et continuez comme vous l'attendez.
Note: vous pourriez également besoin d'utiliser le InternetExplorerMedium objet par opposition à l' internet explorer objet. Il est également préférable de "tenir" à une session.
Voici ma version qui est presque la même chose que l'Anup.
références pour MS Office VBA:
Microsoft Internet Controls
Microsoft Shell de Commandes et automatismes
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
nous avons eu ce problème en utilisant IE9. Il se pose en raison des paramètres de sécurité. Il y a un paramètre appelé "activer le Mode protégé" dans l'onglet "Sécurité" de la boîte de dialogue "Options Internet" (Outils...Internet options). Chaque " zone "peut avoir un paramètre différent pour" activer le mode protégé "Nous n'avons pas vérifié" activer le mode protégé " et cela a résolu notre problème. Je pense que ce qui se passe est que lorsque passer à une zone qui est en mode protégé, IE commence un nouveau processus pour gérer le trafic dans cette zone (peut-être tuer l'ancien processus). Lorsque cela se produit, votre variable objet IE dans VBA est déconnectée d'Internet Explorer.
Essayez celui-ci:
Set IE = GetObject("new:{D5E8041D-920F-45e9-B8FB-B1DEB82C6E5E}")
très Bien, vient de trouver une solution, a décidé, en désespoir de cause pour essayer de charger 127.0.0.1 au lieu de localhost, bien sûr, pas de problèmes, donc résolu l'adresse ip du serveur intranet local, et maintenant je suis bon pour aller. Je ne comprends pas vraiment pourquoi, mais ça 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 ici une erreur , j'ai trouvé une petite solution alternative délicate pour cela comme ci-dessous "Prendre de référence pour Microsoft Shell de Commandes Et automatismes 'Utiliser le code ci-dessous pour réassigner L'objet IE pour le problème de la connexion perdue
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, la suite travaillé:
- Ouvrir Internet explorer
- allez à outils
- Goto options Internet
- Allez à l'onglet Sécurité
- cliquez sur Sites de confiance
- cliquez sur les sites
- Vous verrez l'url du site, sélectionnez
- Cliquez Sur Supprimer
- cliquez sur Fermer, appliquer et Ok
Ps. J'ai testé ces étapes sur IE 8 browser.
peut-être que vous avez un problème avec la reliure? C'est une étrange erreur d'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
j'ai exactement le même problème à travailler avec un site web qui est à l'intérieur de notre intranet d'entreprise et est également inclus dans mes sites de confiance. Désactiver le mode protégé me permet de vérifier ReadyState, mais seulement si je suis désactivé pour la zone internet en plus de l'intranet et des sites de confiance.
pourquoi l'activation du mode protégé pour la zone internet causerait-elle l'erreur d'automatisation lors de la vérification de ReadyState sur un site de confiance? Est-il un moyen de contourner cela sans désactiver le mode protégé pour la zone internet?
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
Note, en utilisant InternetExplorerMedium (voir d'autres réponses) généralement tout ce dont vous avez besoin, pour votre information aussi vous pouvez utiliser la propriété Url obj.LocationURL au lieu du nom de la fenêtre qui serait plus précis. Voir les autres réponses.