以下Excel宏(它正在向此网页发出xmlhttp请求以在第二阶段检索某些值)在VBA中正常工作,直到一段时间之前:
Sub WebReq()
Link = "http://it.finance.yahoo.com/q?s=^FCHI&ql=10" & str(rnd())
Set htm = CreateObject("htmlFile")
Set RequestWeb = CreateObject("msxml2.xmlhttp")
With RequestWeb
.Open "GET", "" & Link & "", False
.send
htm.body.innerhtml = .responsetext
End With
End Sub
现在,在方法调用时:
.send
对象msxml2.xmlhttp的引发了以下错误:
Run-time error '-2147024891 (80070005)'
Access is denied.
我一直在寻找网络,但所有类似的线程都没有回答。任何人都可以向我解释这个错误意味着什么,如果有任何方法我可以修复它甚至只是解决它?
注意:变量末尾的随机字符串'链接'已添加以强制页面重新加载,因为脚本正在检索实时值,因此每次都应加载它。
其他信息:在寻找解决方案的同时,我现在注意到链接的随机部分即使在我结束运行并再次重启时也总是产生相同的值:< / p>
Link = http://it.finance.yahoo.com/q?s=^FCHI&ql=10 .7055475
为什么会这样?不应该rnd()
在每次通话时产生0到1之间的新随机值吗?
答案 0 :(得分:9)
使用CreateObject(“MSXML2.ServerXMLHTTP.6.0”) 从本地计算机发出的标准请求禁止访问不受IE信任的站点。这是不执行这些检查的服务器端对象。
答案 1 :(得分:5)
我发现,在我的情况下,将http更改为https修复了访问被拒绝的问题。我只能假设网站以某种方式做出了改变而没有告诉任何人
答案 2 :(得分:2)
<强>更新强>
Sub WebReq()
link = "http://it.finance.yahoo.com/q?s=^FCHI&ql=10" & Str(Rnd())
Set htm = CreateObject("htmlFile")
Dim objHttp
Set objHttp = CreateObject("Msxml2.ServerXMLHTTP")
objHttp.Open "GET", link, False
objHttp.Send
htm.body.innerhtml = objHttp.responsetext
Set objHttp = Nothing
End Sub
答案 3 :(得分:2)
访问被拒绝是IE问题
internet options > security tab > custom security level > Miscellaneous >Access data sources across domains > enable
答案 4 :(得分:0)
我能够通过更改从&#34; http://&#34;传递的链接来修复它。到&#34; https://&#34;
我拉的网站已升级,尝试使用不安全的链接提取数据失败。现在工作得很好(不需要更改代码。
答案 5 :(得分:0)
这对我有用:
With CreateObject("MSXML2.ServerXMLHTTP.6.0")
.Open "GET", URL, False
.Send
content = .ResponseText
End With
答案 6 :(得分:0)
恐怕我不知道为什么会出现此问题,但我猜想它是安全的“ https://”与不安全的“ http://”的结合。在遵循VBA课程的示例代码时,我遇到了同样的“访问被拒绝”消息。原始代码为:
XMLPage.Open "GET", "http://x-rates.com/table/?from=GBP&amount=3", False
XMLPage.send
我将“ http://”更改为“ https://”,错误消失了。
答案 7 :(得分:0)
在自定义链接的“ https://”之后添加“ www”, 像这样:
XMLPage.Open "GET", "https://www.x-rates.com/table/?from=GBP&amount=3", False
XMLPage.send