web-dev-qa-db-ja.com

Excel VBA Controlling IEローカルイントラネット

だから、私はExcel VBAコードを使用して私たちのウェブサイト上のボタンをクリックします、私を信じて、これは最善のことではないことを知っていますが、現時点で私にとって利用可能な最も不快なオプションではありません。

そのため、この選択は私の問題です、このコードを使用して、imdb.com、googleなどを正常にロードできます。しかし、ローカルサイトをロードすると、ieオブジェクトの制御が失われ、 readyStateを確認してください。終了できません。ここに私が得るエラーがあります。実行時エラー '-2147023179(800706b5)':

自動化エラーインターフェイスは不明です

代わりに、次のメッセージが頻繁に表示されます:実行時エラー '-2147417848(80010108)':

オートメーションエラー呼び出されたオブジェクトはクライアントから切断されました。

デバッグをクリックするとie.readyStateが示されますが、コメントアウトしてから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
15
Varyl

この問題に対する迅速で簡単な解決策は次のとおりです。

の代わりに:

set IE = createobject("internetexplorer.application")

使用する:

Set IE = New InternetExplorerMedium

IE設定を微調整する必要はありません

28
Vigneshts88

ここで何が起こっているのかです。ブラウザが内部的に別のセキュリティゾーンに「ジャンプ」した場合-たとえばローカルアドレスからinTRAnetアドレスまたはinTERnetアドレスに-IEは、IEそして、より強固なセキュリティで別のものを開きます。古いものと新しいIEプロセスはIE親に対する子プロセスIEタスクであるため、ブラウザまたはタスクマネージャでプロセスを監視しても発生しません。ProcessExplorer(Microsoftから無料)を使用すると、この発生を確認できます。

このタイプの環境で行う必要があるのは、上記のAnup Upadhyayのソリューションを使用することです。彼のコードスニペットは、すべてのIEタスク(親と子は違いはありません)を見て、Webアドレスを指している新しいプロセスIE同じアドレスに対して複数のブラウザを開いていない限り、新しいプロセスが確実に検出され、期待どおりに実行されます。

注:InternetExplorerオブジェクトではなく、InternetExplorerMediumオブジェクトを使用する必要がある場合もあります。また、セッションを「保留」することも優れています。

ここに私のバージョンがありますが、これはAnupのものとほぼ同じです。

MS Office VBAの参照:

  • Microsoftインターネットコントロール

  • 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
17
Jim M

これを試してください:

Set IE = GetObject("new:{D5E8041D-920F-45e9-B8FB-B1DEB82C6E5E}")
7
Rick

IE9を使用してこの問題が発生しました。セキュリティ設定が原因で発生します。 [インターネットオプション]ダイアログボックスの[セキュリティ]タブに[保護モードを有効にする]という設定があります(ツール...インターネットオプション)。各「ゾーン」には、「保護モードを有効にする」ための異なる設定があります。「保護モードを有効にする」のチェックを外すと、問題が解決しました。プロテクトモードのゾーンに切り替えると、IEは、そのゾーンのトラフィックを処理するために新しいプロセスを開始します(古いプロセスを強制終了する可能性があります)。 IE VBAのオブジェクト変数はInternet Explorerから切断されます。

7
Gove

さて、解決策を見つけたので、ローカルホストの代わりに127.0.0.1をロードしようと必死になって決定しました、確かに問題はありませんでしたので、ローカルイントラネットサーバーのIPアドレスを解決しました。理由はよくわかりませんが、これで私の問題は解決しました。

4
Varyl

私にとっては、以下がうまくいきました:

  1. Internet Explorerを開きます
  2. ツールに移動
  3. Gotoインターネットオプション
  4. [セキュリティ]タブに切り替える
  5. 信頼済みサイトをクリックします
  6. クリックサイト
  7. サイトのURLが表示されるので、選択します
  8. 削除をクリックします
  9. 閉じるをクリックして適用し、OK

追伸IE 8ブラウザでこれらの手順をテストしました。

2
student

別のソリューション..

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

通常、必要なものはすべてInternetExplorerMedium(他の回答を参照)を使用してください。また、より正確なウィンドウ名の代わりにUrlプロパティobj.LocationURLを使用することもできます。他の回答をご覧ください。

1
ozmike

たぶん、バインディングに問題がありますか?これを取得するのは奇妙なエラーです。

このコードを試してください( http://www.excely.com/Excel-vba/ie-automation.shtml から適応)。うまくいけば:

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
Joseph

会社のイントラネット内にあり、信頼できるサイトにも含まれているWebサイトで、まったく同じ問題が発生しています。保護モードを無効にすると、イントラネットと信頼済み​​サイトに加えてインターネットゾーンを無効にした場合にのみ、ReadyStateを確認できます。

インターネットゾーンで保護モードを有効にすると、信頼済みサイトでReadyStateを確認するときに自動化エラーが発生するのはなぜですか?インターネットゾーンの保護モードを無効にせずにこれを回避する方法はありますか?

1
engineer_dave