下拉列表依赖于 IE 中的其他下拉列表,不会更新 vba
Dropdown list depends on other Dropdown list in IE and doesn't update vba
我正在使用 VBA 来自动化 IE。我有两个下拉列表(我们称它们为“A”和“B”)。 B 列表取决于 A 列表的值,因此 B 列表不会显示其值,除非我先手动 select 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"> 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>
如果您检查 HTML 代码,您会注意到两个下拉控件都有 onchange 事件。
设置值后,您需要从 VBA 代码中触发 onchange 事件可能有助于解决问题。
触发 onchange 事件的示例代码。
Set ieEvent = htmldoc.createEvent("HTMLEvents")
ieEvent.initEvent "change", False, True
ie.document.all.Item("puntoDeVenta").dispatchEvent ieEvent
我通过在值入口下面添加这个来解决它:
ie.document.getElementById("puntodeventa").FireEvent ("onchange")
我正在使用 VBA 来自动化 IE。我有两个下拉列表(我们称它们为“A”和“B”)。 B 列表取决于 A 列表的值,因此 B 列表不会显示其值,除非我先手动 select 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"> 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>
如果您检查 HTML 代码,您会注意到两个下拉控件都有 onchange 事件。
设置值后,您需要从 VBA 代码中触发 onchange 事件可能有助于解决问题。
触发 onchange 事件的示例代码。
Set ieEvent = htmldoc.createEvent("HTMLEvents")
ieEvent.initEvent "change", False, True
ie.document.all.Item("puntoDeVenta").dispatchEvent ieEvent
我通过在值入口下面添加这个来解决它:
ie.document.getElementById("puntodeventa").FireEvent ("onchange")