だから、私は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
この問題に対する迅速で簡単な解決策は次のとおりです。
の代わりに:
set IE = createobject("internetexplorer.application")
使用する:
Set IE = New InternetExplorerMedium
IE設定を微調整する必要はありません
ここで何が起こっているのかです。ブラウザが内部的に別のセキュリティゾーンに「ジャンプ」した場合-たとえばローカルアドレスから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
これを試してください:
Set IE = GetObject("new:{D5E8041D-920F-45e9-B8FB-B1DEB82C6E5E}")
IE9を使用してこの問題が発生しました。セキュリティ設定が原因で発生します。 [インターネットオプション]ダイアログボックスの[セキュリティ]タブに[保護モードを有効にする]という設定があります(ツール...インターネットオプション)。各「ゾーン」には、「保護モードを有効にする」ための異なる設定があります。「保護モードを有効にする」のチェックを外すと、問題が解決しました。プロテクトモードのゾーンに切り替えると、IEは、そのゾーンのトラフィックを処理するために新しいプロセスを開始します(古いプロセスを強制終了する可能性があります)。 IE VBAのオブジェクト変数はInternet Explorerから切断されます。
さて、解決策を見つけたので、ローカルホストの代わりに127.0.0.1をロードしようと必死になって決定しました、確かに問題はありませんでしたので、ローカルイントラネットサーバーのIPアドレスを解決しました。理由はよくわかりませんが、これで私の問題は解決しました。
私にとっては、以下がうまくいきました:
追伸IE 8ブラウザでこれらの手順をテストしました。
別のソリューション..
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を使用することもできます。他の回答をご覧ください。
たぶん、バインディングに問題がありますか?これを取得するのは奇妙なエラーです。
このコードを試してください( 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
会社のイントラネット内にあり、信頼できるサイトにも含まれているWebサイトで、まったく同じ問題が発生しています。保護モードを無効にすると、イントラネットと信頼済みサイトに加えてインターネットゾーンを無効にした場合にのみ、ReadyStateを確認できます。
インターネットゾーンで保護モードを有効にすると、信頼済みサイトでReadyStateを確認するときに自動化エラーが発生するのはなぜですか?インターネットゾーンの保護モードを無効にせずにこれを回避する方法はありますか?