2

我有一个简单的 VBA 代码(见下文),它转到一个网页,选择一些值,单击“开始下载”按钮,然后保存文件。问题是我被困在“点击下载按钮”部分。有人可以帮忙吗?

这是代码:

Sub Treasury_Auc_Notes()

    Dim IE As Object

    Set IE = Nothing
    Set IE = CreateObject("InternetExplorer.Application")
    IE.Visible = True
    IE.Navigate "http://www.treasurydirect.gov/RI/OFAuctions?form=ndnld&typesec=notes"

    While IE.Busy
        DoEvents
Wend

    IE.Document.All.Item("begYr").Value = "2012"
    With IE.Document.getElementsByName("cols")
        .Item(0).Checked = True
    End With

    'Click "Begin download" button  (this is where I am stuck)
    'Choose Save Open or Cancel   (I haven’t got to this part yet)

    ActiveWorkbook.SaveAs Filename


End Sub
4

1 回答 1

0

这很棘手,并且由于我的笔记本电脑的安全性受到限制,我无法 100% 验证这一点,但请尝试:

While IE.ReadyState <> 4
    DoEvents
Wend

IE.Document.All.Item("begYr").Value = "2012"
With IE.Document.getElementsByName("cols")
    .Item(0).Checked = True
End With
Dim ele As Object

For Each ele In IE.Document.Forms
    If ele.Action = "/RI/OFAuctions" Then
        ele.Submit
        Exit For
    End If
Next

您可能必须使用SendKeys(我认为Application.SendKeys "o")方法打开文件,然后使用 VBA 将其保存ActiveWorkbook到所需位置。SendKeys由于下面提到的原因,我无法测试。

或者,我很确定有一个 WinAPI 函数可以比SendKeys. 您需要获取“hWnd保存”对话框并执行一些其他操作来强制它打开/保存。这是相当先进的 VBA,我可能在某处有参考,但很少需要使用它。如果您对此特定部分有疑问,我会敦促您提出一个单独的问题“如何获取文件保存对话框的 hWnd 并从 IE 下载文件”或类似的问题。

注意:我无法测试该SendKeys方法。当我使用上面的代码时,我相当确定文件正在被下载,但它会转到一个隐藏的临时文件夹,而且很难找到。无论如何,它似乎确实是通过一些手动干预来下载的。我收到这个警告:

在此处输入图像描述

我点击忽略它(我不知道如何自动化这部分,我只是想验证表单.Submit方法是否确实有效),并且经过一些创造性的搜索(临时互联网文件通常被转储到一个奇怪/隐藏的文件夹中)我确认文件已下载,尽管它显示为 TXT 扩展名而不是 CSV。

在此处输入图像描述

如果我不使用 VBA,而是手动单击按钮,然后选择“打开”文件以 CSV 格式打开,并且与该临时 Internet 位置具有相同的路径。

于 2013-09-21T00:21:36.867 回答