ShDocVw.dll InternetExplorer对象 - 操作本地.html文件时“访问被拒绝”

时间:2012-02-10 02:44:25

标签: internet-explorer excel-vba runtime-error shdocvw local-files

Dim IE As New ShDocVW.InternetExplorer
IE.Visible = True
IE.Navigate("C:\Users\m0180kb\desktop\test.html")
Do Until IE.Busy = False
Loop
IE.Document.All("testField").Value = "Testing"    'This line causes the error
IE.Close

以下是错误:运行时错误'-2147024891(80070005)':访问被拒绝。

更多信息:编码正在Excel VBA中完成。如果我使用有效的URL代替文件路径,它就可以工作。只要该html文件在浏览器窗口中加载,与InternetExplorer对象关联的所有对象和属性都将因“访问被拒绝”错误而变得无用。

我想到的一个解决方法是通过文本流生成.html代码。这将允许我操作我的表单字段,但是,我仍然需要通过ShDocVW.dll提交html表单....你猜对了....导致访问被拒绝错误。

如果您知道无论如何要解决此错误,或者知道任何可能允许我通过excel vba操作本地html文件的注册表项或安全设置,请通知我。

由于

2 个答案:

答案 0 :(得分:0)

这对我有用

Option Explicit

Sub Sample()
    Dim IE As Object, ieDoc As Object

    Set IE = CreateObject("InternetExplorer.Application")

    IE.Visible = True
    IE.Navigate ("C:\Users\m0180kb\desktop\test.html")

    Do While IE.ReadyState <> 4: DoEvents: Loop

    Set ieDoc = IE.Document

    ieDoc.getElementById("testField").Value = "Testing"

    'IE.quit
End Sub

答案 1 :(得分:0)

我弄清楚问题是什么。它与代码或本地计算机安全设置无关。

我的计算机上的.html文件有2个框架,每个框架都在加载不同的网站。由于这是一种巨大的安全风险,称为跨框架脚本,当html文件中存在2个域时,所有脚本语言(如vba,javascript或使用mshtml.dll或shdocvw.dll的任何其他语言)都将被禁用。

有一种方法可以使这项工作,但它涉及为两个正在组合的网站添加一行代码。基本上,如果您不是网页的所有者,则无法添加此行代码,这会阻止外人在您的网站上进行跨框架脚本编写。

这解释了为什么我的测试是通过互联网进行的,但是当我通过本地驱动器上的帧组合2个域时。知道这一点,我可以改变我的方法,并仍然提出一个可接受的解决方案。

感谢大家的建议。非常感谢。