从Web(VBA)插入数据时选择下拉列表

时间:2017-01-21 21:42:27

标签: excel vba web-scraping

我想将网页(http://www.debentures.com.br/exploreosnd/consultaadados/sndemumclique/)中的一些数据下载到Excel电子表格中。

加载此页面后,我必须从“CódigadoAtivo”下拉列表中手动选择一个选项,然后选择“议程”。

有没有办法可以通过VBA自动完成?

例如:从“CódigadoAtivo”下拉列表中选择“RDVT11”,选择“议程”,然后从页面底部显示的表中下载数据?

到目前为止我的宏:

Private Sub Agenda()
Sheets("Dados").Select

Dim ProductionAddress As String
ProductionAddress = "http://www.debentures.com.br/exploreosnd/consultaadados/sndemumclique/x_pu_historico_r.aspx?"

Dim ie As Object
Set ie = CreateObject("InternetExplorer.Application")
With ie
    .Silent = True
    .Visible = True
    .Navigate ProductionAddress
End With

While ie.ReadyState <> 4 Or ie.Busy: DoEvents: Wend

ie.document.getElementByid("ctl00_ddlAti").Value = "RDVT11|11001110111100001" 

 While ie.ReadyState <> 4 Or ie.Busy: DoEvents: Wend


Set objButton = ie.document.getElementByid("ctl00_x_agenda_r")
    objButton.Focus
    objButton.Click
 While ie.ReadyState <> 4 Or ie.Busy: DoEvents: Wend

ie.Quit
 Set ie = Nothing
End Sub

2 个答案:

答案 0 :(得分:0)

您需要捕获浏览器在下拉列表激活时发送的请求。打开Chrome开发工具并观看网络标签。您将看到sndemumclique/的POST请求。这将有一些标题和表单数据。您的代码需要基本上复制此请求。可能,并非所有的标题和表单字段都是必需的,但如果不尝试就无法知道。

答案 1 :(得分:0)

以下是全部3部分。做两个选择并将表格写入表格。

备注:

①首选:

要进行RDVT11选择,我首先使用下拉列表的Id来捕获变量中的元素:

Set a = .document.getElementById("ctl00_ddlAti")

接下来,我循环下拉选项,使用a.getElementsByTagName("Option")生成我循环的集合。找到目标选择文本后,我将该选项设置为Selected并退出循环。

For Each currentOption In a.getElementsByTagName("Option")
    If InStr(currentOption.innerText, optionText) > 0 Then
        currentOption.Selected = True
        Exit For
    End If
Next currentOption

②选择议程:

然后我将agenda的{​​{1}}选项定位到其Sobre e emissãoid,然后等待刷新页面:

click

③获取表格并写入工作表:

然后我定位由.document.getElementById("ctl00_x_agenda_r").Click While .Busy Or .readyState < 4: DoEvents: Wend 加载的表。这是在循环内完成的,以确保表存在:

id

我最后,循环表格中的行和列,写出Do: On Error Resume Next: Set nTable = .document.getElementById("aGENDA"): On Error GoTo 0: DoEvents: Loop While nTable Is Nothing

<强>代码:

Activesheet

页面上的数据(示例)

Sample

代码输出(示例):

Sample