我有一个简单的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
答案 0 :(得分: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,我可能会在某处提到它,但很少需要使用它。如果您在使用此特定部分时遇到问题,我建议您单独提出一个问题“如何获取文件保存对话框并从IE下载文件”或类似的内容。
注意:我无法测试SendKeys
方法。当我使用上面的代码时,我相当确定文件正在下载,但是它将被隐藏到一个临时文件夹,很难找到。在任何情况下,它似乎都是通过一些手动干预下载。我收到了这个警告:
我点击忽略它(我不知道如何自动化这部分,我只是想验证表单.Submit
方法实际上是否有效),以及经过一些创意搜索(临时互联网文件被丢弃)通常在一个奇怪/隐藏的文件夹中)我验证文件已下载,尽管它显示为TXT扩展名而不是CSV。
如果不是使用VBA,而是手动点击该按钮,我选择“打开”该文件将以CSV格式打开,并具有与该临时互联网位置相同的路径。