19

Excel VBA コードを使用して、Web サイトのボタンをクリックしています。これが最善の策ではないことは承知していますが、私にとって最も好ましくないオプションです。

このコードを使用して、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
4

11 に答える 11

7

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

于 2013-03-28T16:42:34.420 に答える
4

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

于 2012-10-19T16:35:16.837 に答える
4
Dim IE As Object
Set IE = CreateObject("InternetExplorer.Application")
IE.Visible = False
IE.Navigate "C:\abc.html"

'ここでエラーが発生しています。以下のように、これに対する小さなトリッキーな代替ソリューションを見つけました

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
于 2013-11-05T05:44:11.933 に答える
2

私にとっては、以下が機能しました:

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

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

于 2015-03-30T15:14:11.573 に答える
1

別の解決策..

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 を使用することもできます。他の回答を参照してください。

于 2015-02-26T00:52:09.073 に答える
1

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

このコードを試してください ( 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
于 2012-10-19T13:55:44.217 に答える