Excel VBA - 访问网站,生成报告并在 IE 对话框栏上按保存

Excel VBA - Access Website, generate report & press save on IE dialog bar

我有一个关于某个话题的问题,这个话题已经在其他一些话题和论坛中讨论过了,但我无法让它对我有用。所以我来这里问关于我个人代码的问题。

基本上,我访问一个内部网站并根据一些输入(通过复选框)使用来自 SAP 的数据创建一个报告。

我的问题是在报告生成后出现的,IE 提示我按其对话框中的 "save" 按钮。我没能使那部分自动化。

你能帮我吗?我想将报告存储在 "Downloads" 文件夹中。

您会在下面找到我的代码。 由于合规原因,我无法显示原始 URL.

非常感谢任何帮助。

最佳 西蒙


Dim ie As InternetExplorer
Dim html As HTMLDocument
Dim i As Integer

Set ie = New InternetExplorerMedium
ie.Visible = True
ie.navigate "https://blablablablablabla"
Application.Wait (Now + TimeValue("00:00:03"))

Set html = ie.document

html.getElementById("ctl00_MainContent_RadCboRepFilter1_Arrow").Click
Application.Wait (Now + TimeValue("00:00:01"))

html.getElementsByClassName("rcbList")(0).Children(5).Click
Application.Wait (Now + TimeValue("00:00:01"))

html.getElementById("ctl00_MainContent_RadCboRepFilter2_Arrow").Click
Application.Wait (Now + TimeValue("00:00:01"))

html.getElementsByClassName("rcbList")(0).Children(0).Click
Application.Wait (Now + TimeValue("00:00:01"))

html.getElementById("ctl00_MainContent_RadCboListOppStatus_ctl01").Click

html.getElementById("ctl00_MainContent_RadCboListOppStatus_ctl02").Click

html.getElementById("ctl00_MainContent_RadcboListSalesStage_ctl00").Click

html.getElementById("ctl00_MainContent_RadcboListSalesStage_ctl01").Click

html.getElementById("ctl00_MainContent_RadcboListSalesStage_ctl02").Click
Application.Wait (Now + TimeValue("00:00:01"))

html.getElementById("MainContent_BtnRunReport").Click

End Sub

一般情况下,从IE浏览器下载文件时,会提示用户点击保存按钮。 我们可以使用 Application.SendKeys "%{s}" 命令来单击 VBA 中的保存按钮。

示例代码如下:

Sub Test()
    Dim IE As Object

    Set IE = CreateObject("InternetExplorer.Application")
    With IE
        .Visible = True
        .Navigate "<the website url>"

        While IE.ReadyState <> 4
            DoEvents
        Wend

        'click the button to download the file.
        IE.Document.getElementbyId("btnDowloadReport").Click

        'wait the download prompt appear
        Application.Wait (Now + TimeValue("00:00:03"))

        Application.SendKeys "%{s}"

        'Waiting for the site to load.
    End With
    Set IE = Nothing
End Sub

Html 页面资源:

<a id="btnDowloadReport" href="https://research.google.com/pubs/archive/44678.pdf" download>Download</a>

[注意]请检查您的IE浏览器设置,确保下载路径是"Downloads"文件夹。