【问题标题】:How to click on this particular button from VBA?如何从 VBA 单击此特定按钮?
【发布时间】:2013-09-20 20:22:21
【问题描述】:

我有一个简单的 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

【问题讨论】:

  • 您需要创建另一个对象来表示按钮,可能使用GetElementsByTagName方法,然后您可以调用该对象的.Click方法。

标签: vba button


【解决方案1】:

这个很棘手,由于我笔记本电脑的安全性限制,我无法 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 位置具有相同的路径。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-23
    • 1970-01-01
    • 2020-02-24
    • 2016-09-28
    • 1970-01-01
    • 2018-08-07
    相关资源
    最近更新 更多