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
14
demandé sur Community 2012-10-19 02:59:45

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

25
répondu Vigneshts88 2013-10-07 09:54:20

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
16
répondu Jim M 2015-01-05 17:39:50

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.

6
répondu Gove 2013-03-28 16:42:34

Essayez celui-ci:

Set IE = GetObject("new:{D5E8041D-920F-45e9-B8FB-B1DEB82C6E5E}")
6
répondu Rick 2013-09-06 12:10:49

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.

4
répondu Varyl 2012-10-19 16:35:16
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
4
répondu Anup Upadhyay 2013-11-05 05:44:11

Pour moi, la suite travaillé:

  1. Ouvrir Internet explorer
  2. allez à outils
  3. Goto options Internet
  4. Allez à l'onglet Sécurité
  5. cliquez sur Sites de confiance
  6. cliquez sur les sites
  7. Vous verrez l'url du site, sélectionnez
  8. Cliquez Sur Supprimer
  9. cliquez sur Fermer, appliquer et Ok

Ps. J'ai testé ces étapes sur IE 8 browser.

2
répondu student 2015-03-30 15:14:11

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
1
répondu Joseph Serido 2012-10-19 13:55:44

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?

1
répondu engineer_dave 2013-07-17 13:28:06

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.

1
répondu ozmike 2016-05-06 02:17:23