使用VBA Excel通过更改下拉列值来浏览网站

时间:2013-05-02 21:18:04

标签: internet-explorer excel-vba drop-down-menu vba excel

我正在编写一个Excel宏,它将导航到公用事业公司网站,然后下载链接到该帐户的所有语句。要进入语句下载页面,我需要导航到每个帐户的摘要页面。所有帐户都列在下拉列表中 - 当我从列表中手动单击其他帐户时,该页面将更新为新帐户。使用我从this question获得的提示,我可以获取宏来更改下拉值。问题是,即使它从列表中选择了一个新值,该页面也不会更新到新帐户。不幸的是,没有直接链接到每个帐户的页面,因为它看起来像下拉列表将值传递给脚本。我尝试从不同的帐户复制URL,但不管URL上的帐号是相同的。以下是有问题的VBA代码:

Do While i < intNumberAcct
    ie.document.getElementById("ctl00_PageContent_AccountDropDown_BillingAccountsDropDown").selectedindex = i
    Call downloadStatement
    i = i + 1
Loop

我尝试在更改下拉列值后刷新IE,但是当刷新后,它会恢复到下拉列表中的原始值。在选择新索引后我也尝试ie.document.getElementById("ctl00_PageContent_AccountDropDown_BillingAccountsDropDown").Click,但它没有任何效果。

以下是下拉列表的html源代码 - 我删除了大量帐户,因此不会太长,并使用“x”对帐号和地址进行模糊处理:

<table style="width: 100%" cellpadding="0" cellspacing="0">
<tr>
    <td valign="top" class="AccountDropDownLabelCells" style="height: 25px;">
        <strong>Billing Account:</strong>
    </td>
    <td valign="top" style="text-align: left" align="left">
        <select name="ctl00$PageContent$AccountDropDown$BillingAccountsDropDown" onchange="javascript:setTimeout(&#39;__doPostBack(\&#39;ctl00$PageContent$AccountDropDown$BillingAccountsDropDown\&#39;,\&#39;\&#39;)&#39;, 0)" id="ctl00_PageContent_AccountDropDown_BillingAccountsDropDown" style="width:250px;">
          <option value="xxxxx">xxxxx(16 xxxxx Dr)</option>
          <option selected="xxxxx" value="xxxxx">xxxxx(18 xxxxxDr)</option>
          <option value="xxxxx">xxxxx(20 xxxxx Dr)</option>
          <option value="xxxxx">xxxxx(22 xxxxxDr)</option>
          <option value="xxxxx">xxxxx(28 xxxxx Dr)</option>
          <option value="xxxxx">xxxxx(30 xxxxxDr)</option>
          <option value="xxxxx">xxxxx(34 xxxxxDr)</option>
</select>
        &nbsp;
    </td>
</tr>


</table>

有关如何在下拉列表中选择页面后更新新帐户的任何想法,我们将不胜感激。

1 个答案:

答案 0 :(得分:3)

设置下拉列表后,您需要触发更改事件。

  

select name =“ctl00 $ PageContent $ AccountDropDown $ BillingAccountsDropDown” onchange =“javascript:setTimeout('__ doPostBack(\'ctl00 $ PageContent $ AccountDropDown $ BillingAccountsDropDown \',\'\')',0)” id =“ctl00_PageContent_AccountDropDown_BillingAccountsDropDown”style =“width:250px;”

doc.getElementById("xs_r_gender").selectedindex=1
doc.getElementById("xs_r_gender").FireEvent("onchange")