3
Dim IE as New InternetExplorer
IE.Visible = True

IE.Navigate("http://www.google.com")

Do Until IE.Busy = False
Loop

IE.document.getElementsByTagName("Input")(3).Value = "Search Term"

IE.document.Forms(0).Submit     <------ This line results in error.

エラーは、実行時エラー 70 を示しています: '許可が拒否されました'

コードの変更を提案しないでください。コードに問題はありません。このマクロは、10 台中 9 台のコンピューターで動作します。これはタイミングの問題ではありません (手動でステップスルーしてもエラーが発生します)。Internet Explorer オブジェクトを宣言する方法が他にもあることは知っています。私は CreateObject などを使ってみました。どれも重要ではありません。管理者として実行しても役に立ちません。

これは問題の単純な例です (実際にはもっと複雑なタスクを自動化しています)。ですから、「なぜ良い検索をしたいのですか?」と聞かないでください。「何をしようとしているのか」と聞かないでください。この問題を解決する必要があります。コードを書き直す必要はありません。

私たちは、Windows XP、Internet Explorer 7、および Office 2003 を使用しています。インターネット エクスプローラーを自動化できない人が何らかの原因で発生しています。これはユーザーの問題ではなく、コンピュータの問題です。私が言いたいのは、犯人のコンピューターでは、どのユーザーがログインしても誰も自動化できないということです。しかし、同じユーザーが別のコンピューターを使用することはでき、すべて問題ありません。したがって、ローカル マシンのレジストリ設定などである可能性があります。ここでは、すべてのコンピューターが同じようにセットアップされ、同じ仕様、同じソフトウェアが使用されています。

私はググってググってググってググった。残念ながら、実行時エラー 70 はすべてをキャッチしているようで、多くのユーザーがさまざまな症状でエラーを報告しています。私の場合、解決策が見つかりませんでした。それ以外の場合は、ここで質問しません。

これを解決できる唯一の方法は、IT 部門にハード ドライブ上のすべてのデータを完全にリロードさせることです。オペレーティング システムを含むクリーン リフレッシュ。これで問題は解決しますが、ユーザーはマシンを以前の状態に再設定し、すべてのソフトウェアとすべてを再インストールする必要があります。それは良い解決策ではありません。これを引き起こしているマシンのどこかに設定があるか、リフレッシュしても効果がありません。その設定が何であるかを知りたいです(私の気持ちはレジストリ設定です)。

どんな助けでも大歓迎です、ありがとう。

4

8 に答える 8

1

私はこれとまったく同じ問題を抱えていました。1 年間正常に動作していた IE を自動化するためのスクリプトがありました。その後、突然、この「許可拒否エラー」を受け取り始めました。私は2つのことを行い、そのうちの1つは問題を解決しましたが、どちらが解決したかわかりません。

  1. 「Microsoft Internet Controls」への参照を削除し、プロジェクトのコンパイルを試み、「Internet Controls」への参照を再度追加して、プロジェクトをコンパイルしました。

  2. いずれにしても IE からイベント イベントをキャプチャする必要がなかったため、InternetExplorer オブジェクトを宣言するときに「WithEvents」キーワードを削除しました。

それが最初のもので、どういうわけか参照が破損し、削除して再度追加すると問題が解決したのではないかと思います。

于 2012-08-10T19:34:49.730 に答える
1

IE を自動化するときに同じエラーが表示されますが、修正する代わりに回避しました。

  Label1:
         If myIe Is Nothing Then
             Set myIe = CreateObject("InternetExplorer.Application") 
         End If

         myIe.Navigate URL:=imdbLink

    For Each link In myIe.document.Links
         If Right(link.href, 9) = "/keywords" And Left(link.href, 26) = "http://www.imdb.com/title/" Then
                    mKPlot = link.href 'ERROR GENERATES FROM THIS, SOMETIMES...
         End If
    next link



errHandler:
    If Err.Number = 70 Then
        Debug.Print "permission denied for: |" & title & "|"

        myIe.Quit
        Set myIe = Nothing

        Application.Wait Now + TimeValue("00:00:10")

        Resume Label1:

    End If

あなたが想像していた洗練されたレジストリ修正ではありませんが、私にとってはうまくいきます。

于 2012-05-16T19:18:53.050 に答える
1

これは、VBA での Internet Explorer の自動化に関する一般的な問題です。通常、新しいページが読み込まれた後に発生するようです。DoEvents と Application.Wait を組み合わせて使用​​し、新しいページの読み込み後に HTMLDocument オブジェクトを Nothing に設定することで成功しました。

以下にサンプルコードを示します。

Option Explicit

Sub IEAutomation()

    Dim IE As InternetExplorer
    Dim html As HTMLDocument
    Dim i As HTMLHtmlElement
    Dim search_bar_id As String
    Dim submit_button_name As String
    Dim search_term As String

    'Define Variables
    search_bar_id = "lst-ib"
    submit_button_name = "btnK"
    search_term = "Learning VBA"

    'Create IE and Naviagate to Google
    Set IE = CreateObject("InternetExplorer.Application") 'Late Binding
    IE.Visible = True
    IE.navigate "http://www.google.com"

    'Wait for IE To Load
    Do While IE.readyState <> READYSTATE_COMPLETE: DoEvents: Loop

    'Create HTMLDocument Object
    Set html = IE.document

    'Enter Search Term into Search Bar and Click Submit Button
    html.getElementById(search_bar_id).innerText = search_term
    Application.Wait Now + TimeValue("0:00:01")
    html.getElementsByName(submit_button_name)(, 1).Click

    'Wait for New Page to Load (** DoEvents Helps with the Permission Issue **)
    Do While IE.readyState <> READYSTATE_COMPLETE: DoEvents: Loop

    'After Page Loads, Reset HTMLDocument Object and Wait 1 Second Before Recreating It
    Set html = Nothing
    Application.Wait Now + TimeValue("0:00:01") '<<< This seems to really help
    Set html = IE.document

    'Print All Elements In H3 Tags to Immediate Window in VBE
    For Each i In html.getElementsByTagName("H3")
        Debug.Print i.innerText
    Next i

End Sub
于 2017-09-01T03:30:50.433 に答える
0

このコードを試してください。これにより、ブラウザで要素を選択/クリックする必要がなくなります。

インドでこれをテストしました

Sub Sample1() '<~~ Works as expected
    Dim IE As New InternetExplorer
    IE.Visible = True
    IE.Navigate ("http://www.google.co.in/#hl=en&q=" & "Search Term")
End Sub

英国向け

Sub Sample2() '<~~ Works as expected
    Dim IE As New InternetExplorer
    IE.Visible = True
    IE.Navigate ("http://www.google.co.uk/#hl=en&q=" & "Search Term")
End Sub

米国でこれを試してください(リクエストがリダイレクトされるため、テストできませんでした)

Sub Sample3()
    Dim IE As New InternetExplorer
    IE.Visible = True
    IE.Navigate ("http://www.google.com/#hl=en&q=" & "Search Term")
End Sub
于 2012-04-23T17:12:48.027 に答える