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 和所有这些东西。这都不重要。以管理员身份运行也无济于事。
这只是问题的一个简单示例(我们实际上正在自动化更复杂的任务)。所以请不要问“为什么要进行goodle搜索?”请不要问“你想做什么”。我需要解决这个问题。我不需要重新编写我的代码。
我们使用 Windows XP、Internet Explorer 7 和 Office 2003。某些原因导致随机人员无法自动化 Internet Explorer。不是用户问题,是电脑问题。我的意思是在罪魁祸首的计算机上,无论哪个用户登录,都没有人可以自动化。但同一个用户可以使用不同的计算机,一切都很好。因此,它可能是本地计算机上的注册表设置或类似的设置。这里所有的电脑都以相同的方式设置,相同的规范,相同的软件。
我用谷歌搜索和谷歌搜索,谷歌搜索和谷歌搜索。不幸的是,运行时错误 70 似乎是一个包罗万象的问题,许多用户报告了不同症状的错误。就我而言,我还没有找到解决方案,否则我不会在这里问。
我们可以解决的唯一方法是让 IT 完全重新加载硬盘驱动器上的所有内容。干净的刷新,包括操作系统。这解决了问题,但也迫使用户将他们的机器重新设置为以前的方式,并重新安装所有软件和所有内容。这不是一个好的解决方案。机器上某处有一个设置会导致这种情况,否则刷新不会产生影响。我想知道那个设置是什么(我的感觉是它是一个注册表设置)。
任何帮助表示赞赏,谢谢。
最佳答案
在测试了以上所有建议的修复甚至更多之后,我肯定这是一个奇怪的错误,当一个网站上有不同的安全区域时,IE 会调用子进程的事件处理。
切入正题,这里是解决方案:
'Craziest workaround ever due to bugged IE Eventhandling
Do While IE.ReadyState = 4: DoEvents: Loop
Do Until IE.ReadyState = 4: DoEvents: Loop
每次导航到新页面或其他可能导致网站重新加载的事件(例如单击提交按钮或类似事件)后添加此代码段。
上面的 Dan 建议在你的代码中自由添加 DoEvents 语句,这对我来说并没有 100% 成功。相反,我建议在适用的地方添加上面的代码。
感谢丹,没有你的评论,我永远不会明白!
此方法相对于其他建议修复的优点的简短摘要:
你不需要 的所有事情的总结:
我只包括上面的总结,因为我已经看到了所有建议的解决方法,并且到目前为止已经亲自尝试过但没有运气。
基于 OP 问题的示例代码:
Dim IE as Object
Set IE = CreateObject("InternetExplorer.Application")
IE.Visible = True
IE.Navigate("http://www.google.com")
'Craziest workaround ever due to bugged IE Eventhandling
Do While IE.ReadyState = 4: DoEvents: Loop
Do Until IE.ReadyState = 4: DoEvents: Loop
IE.document.getElementsByTagName("Input")(3).Value = "Search Term"
IE.document.Forms(0).Submit ' this previously crashed
我真的希望这会在 future 帮助其他人。
感谢所有帮助拼凑解决方案的人。
此致
帕特里克
关于VBA Internet Explorer 自动化 'Permission Denied',我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10283496/