首页 > 解决方案 > 下拉列表依赖于 IE 中的其他下拉列表并且不更新 vba

问题描述

我正在使用 VBA 来自动化 IE。我有两个下拉列表(我们称它们为“A”和“B”)。B 列表取决于 A 列表的值,因此 B 列表不会显示其值,除非我先手动选择 A 列表值。我试过这个:

 Sub pifa ()

      Dim ie As Object
      
      Set ie = CreateObject("internetexplorer.application")
      
      With ie
          .Visible = True
          .navigate "https://serviciosjava2.pifa.gob/rcel/jsp/index_bis.jsp"

           Do While .Busy
               DoEvents
           Loop

           Do While .readyState <> 4
                DoEvents
           Loop
           
                ie.document.getElementById("puntodeventa").Value = "31" 'A list value

           Do While .Busy
               DoEvents
           Loop

           Do While .readyState <> 4
                DoEvents
           Loop
           
                ie.document.getElementById("universocomprobante").Value = "19" 'B list value (doesn't work)
      
      End with

 End sub

对于 A 列表值,一切正常,它会正确更改下拉列表值,但由于我实际上并未手动单击该值,因此 B 列表不会更新并显示这些值。我也试过这个,但不起作用:

 ie.document.getElementById("puntodeventa").Click 'A list value

“A”列表代码:

<select name="puntoDeVenta" onchange="actualizarDescripcionPVConDelay(this.selectedIndex);ajaxFunction();" id="puntodeventa">
        <option value="" selected="selected" style="color:#888;" onclick=document.getElementById("desc_pto_vta").innerHTML="";>seleccionar...</option>
                        
        <option value="31">&nbsp;puntodeventaseleccionado</option>
                        
</select>

“B”列表代码:

 <select name="universoComprobante" onchange="actualizarDescripcionTC(this.selectedIndex);" id="universocomprobante">
        <option value="" selected="selected" style="color:#888;">seleccionar...</option>
                        
        <option value="10">Factura A</option> 'this appears when I click manually the A list

        <option value="19">Factura B</option> 'this appears when I click manually the A list

                        
</select>

标签: htmlexcelvbainternet-explorerdrop-down-menu

解决方案


如果您检查 HTML 代码,那么您会注意到两个下拉控件都有onchange事件。

设置值后,您需要从 VBA 代码中触发 onchange 事件可能有助于解决问题。

触发 onchange 事件的示例代码。

Set ieEvent = htmldoc.createEvent("HTMLEvents")
ieEvent.initEvent "change", False, True
ie.document.all.Item("puntoDeVenta").dispatchEvent ieEvent

推荐阅读