2013-05-02 145 views
3

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

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> 

任何非常感谢在下拉菜单中选择它后如何让页面更新到新帐户的想法。

+0

当你(个人)更改在下拉框中没有页面刷新帐户?你也可以展开你的“选择”框的例子来包含“表单”标签。 – NickSlash 2013-05-02 21:37:51

+0

既然你已经混淆了名字,我认为这是机密数据。推测你已经输入密码来访问这些信息。该网站需要能够将后续传输链接到您。一种常用的技术是分配包含在每个后续传输中的会话ID。你的代码必须模拟这种链接技术,否则网站会假定每次传输都是一个新的查询。 – 2013-05-02 23:42:21

+0

Santosh的提示为我工作。我对这个网站想要重新验证没有任何问题。 – Michael 2013-05-03 17:01:55

回答

3

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

选择name = “ctl00 $ PageContent $ AccountDropDown $ BillingAccountsDropDown” 平变化=“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") 
+0

谢谢 - 我添加了FireEvent,它完美的工作! – Michael 2013-05-03 16:59:59