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文件的注册表项或安全设置,请通知我。
由于
答案 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个域时。知道这一点,我可以改变我的方法,并仍然提出一个可接受的解决方案。
感谢大家的建议。非常感谢。