2

几天来,我一直在兜圈子,试图解决这个问题。

我正在尝试登录站点并使用 VBA 和 InternetExplorer 对象下载文件。问题是,一旦代码单击超链接,我会从 Internet Explorer(在我的情况下为版本 10)收到提示:“您要打开还是保存“file.xls”?我现在该怎么办?

这是我尝试过的:

  1. URLDownloadToFile。这不起作用,因为不登录就无法访问该文件。

  2. 禁用Internet Explorer中的打开/保存提示。也不去。此提示被设计为一种安全“功能”,旨在不被禁用。有些人提到手动输入注册表项可以解决问题,但它对我不起作用。(也许我没有做正确的注册表项?

  3. 是否有用于禁用提示的 Internet Explorer 下载管理器插件?我还没有找到一个。

  4. SendKeys ("%o") '(Alt + o)。这应该“单击”打开文件。为什么不使用它?因为不靠谱。用户有时会切换活动窗口。(有没有办法“发送密钥”到特定窗口?)

  5. 使用WinHttpRequest。这应该可行,但学习如何使用 WinHttpRequest 并重写我的所有代码似乎需要做很多工作。(也许懒人有更多的工作)此外,调试 WinHttpRequest 似乎要困难得多,因为在 IE 中看不到操作,我可以看到正在发生的事情。

  6. 宏指令。理论上,一旦我在网站上输入字段,我就可以使用 iMacros 下载文件。iMacros 的问题是加载和关闭需要时间。它必须用 iMacro 加载 FireFox,然后加载网站,然后关闭 Firefox。我的 VBA 程序旨在下载数百个文件。

帮助!谢谢你。

4

1 回答 1

1

解决方案是使用 cURL 而不是试图争取资源管理器的“帮助”。您可以在 VBA 中的等效 cURL 中找到有关如何执行此操作的详细信息?. 但不是将响应发送到 MsgBox,而是打开一个文件并写入它。当然,这确实在使用WinHTTPRequest,并且您已经在问题中说过“这似乎是一项疯狂的工作”-所以我不确定您是否会对解决方案感到满意。

注意 - 该属性的使用很棘手- 您可以在http://msdn.microsoft.com/en-us/library/windows/desktop/aa384108(v=vs.85)Options找到有关如何使用它的详细信息。 .aspx _ 在给出的示例中,选项 SslErrorIgnoreFlags 设置为 13056 -0x3300这意味着“忽略所有错误”,因为它是

Unknown certification authority (CA) or untrusted root      0x0100
Wrong usage                                                 0x0200
Invalid common name (CN)                                    0x1000
Invalid date or certificate expired                         0x2000

我希望这已经足够了-鉴于您的问题的详细信息,我毫无疑问!

另一个建议(不确定这是否实用) - 使用 VBA 以外的平台。有许多带有工具箱的高级语言就是为了这个目的。我个人最喜欢的是 PHP 中的 cURL,但 Python 中也有一些非常好的选项。但这是否有意义实际上取决于您尝试将其连接到什么。

于 2013-06-28T00:29:52.920 回答