Excel VBA SendKeys不会导致IE 9保存下载

der*_*ble 5 excel automation vba browser-automation office-automation

我正在编写一个宏来从我公司的内部网站下载csv文件.

由于许多原因,我无法使用任何xmlhttp对象.宏将下载该文件.问题是Internet Explorer 9会提示用户使用"打开","保存"和"取消"按钮.

在IE中,Alt + Shift + S将保存下载,但我无法从Excel VBA中获取Sendkeys"%+ s"方法.

这是相关代码:

Function followLinkByText(thetext As String) As Boolean
   'clicks the first link that has the specified text
    Dim alink As Variant

    'Loops through every anchor in HTML document until specified text is found
    ' then clicks the link
    For Each alink In ie.document.Links
       If alink.innerHTML = thetext Then
            alink.Click
            'waitForLoad
            Application.Wait Now + TimeValue("00:00:01")
            Application.SendKeys "%+s", True

            followLinkByText = True
            Exit Function
        End If
     Next

End Function
Run Code Online (Sandbox Code Playgroud)

Sid*_*out 1

正如我在评论中提到的,信息安全栏使得与文件下载窗口交互变得困难。

另一种方法是使用 Web 浏览器控件,然后将 URL 传递给它。但此方法的主要问题是您不能在同一个 Excel 实例中拥有 Web 浏览器。一旦弹出“文件下载”窗口,您的整个 VBA 宏将停止运行,直到您不将其丢弃为止。

这是一个替代方案。这是我在 VB6 中创建的一个小 exe,它将绕过 IE 信息安全栏弹出文件下载窗口。文件下载窗口弹出后,您可以使用 API 与其进行交互,如我的博客文章中所示。

让我们举个例子来看看如何与这个 vb6 exe 文件交互。

在 Excel 中创建一个模块并粘贴此代码。

重要提示:由于您没有给我任何 URL,因此我使用静态 URL。请将其替换为您的链接。现在,根据您指定的链接,您可能会看到这两个下载窗口之一。根据您看到的下载窗口,您必须根据下图找到窗口句柄。有关我提供的博客链接的更多详细信息。

在此输入图像描述

下载附件并将其保存在 say 中C:\。如果将其保存在任何其他位置,请在下面的 Shell 语句中修改它。

Sub Sample()
    Dim sUrl As String

    sUrl = "http://spreadsheetpage.com/downloads/xl/king-james-bible.xlsm"

    Shell "C:\FDL.exe " & sUrl, vbNormalFocus
End Sub
Run Code Online (Sandbox Code Playgroud)

快照

在此输入图像描述

文件:可以在此处下载该文件。