我正在编写一个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('__doPostBack(\'ctl00$PageContent$AccountDropDown$BillingAccountsDropDown\',\'\')', 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>
</td>
</tr>
</table>
有关如何在下拉列表中选择页面后更新新帐户的任何想法,我们将不胜感激。
答案 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")