VBA Select 从下拉列表中填写网络表单
VBA Select from dropdown list while filling webform
我对 VBA 和 HTML 很陌生。我尝试编写一个 VBA 宏来填写网络表单。
我对必须从下拉列表中选择 select 值感到震惊。
Sub test()
Dim IE As Object
Set IE = CreateObject("InternetExplorer.Application")
IE.Visible = True
IE.Navigate ("https://www.fakturowo.pl/wystaw")
Do While IE.ReadyState <> READYSTATE_COMPLETE
Loop
Set doc = IE.Document
doc.getElementById("rodzaj").Value = 26
doc.getElementById("miasto").Value = "XYZ"
doc.getElementById("nazwa_sprzedawca").Value = "XYZ"
doc.getElementById("ulica_sprzedawca").Value = "XYZ"
这是 HTML:
<select name='rodzaj' id="rodzaj" onchange="javascript:submit();">
<option value='47'>Dobowy raport fiskalny</option>
<option value='24'>Dowód dostawy</option>
<option value='27'>Dowód dostawy (tylko ilość)</option>
<option value='7'>Dowód wewnętrzny</option>
<option value='42'>Eksport towarów</option>
<option value='48'>Eksport usług</option>
<option value='49'>Eksport usług (VAT-EU 28b)</option>
<option value='62'>Faktura</option>
<option value='21'>Faktura (bez vat, dawny rachunek)</option>
<option value='45'>Faktura (odwrotne obciążenie bez vat)</option>
<option value='35'>Faktura (odwrotne obciążenie z vat)</option>
<option value='69'>Faktura MPP (mechanizm podzielonej płatności)</option>
<option value='0' selected>Faktura VAT</option>
<option value='44'>Faktura VAT MP</option>
<option value='26'>Faktura VAT RR</option>
<option value='5'>Faktura VAT marża</option>
非常感谢!
戈西亚
您必须触发下拉菜单的 html 更改事件。为此,您必须将 html 下拉元素保存为一个对象变量。所以你可以把它交给需要的函数来触发 html 事件。
相关代码部分我已经注释了:
Sub test()
Dim IE As Object
Dim nodeDropDown As Object 'Needed to set the dropdown as DOM Object
Dim doc As Object
Set IE = CreateObject("InternetExplorer.Application")
IE.Visible = True
IE.Navigate ("https://www.fakturowo.pl/wystaw")
Do While IE.ReadyState <> 4: DoEvents: Loop
Set doc = IE.Document
'set the dropdown as DOM object
Set nodeDropDown = doc.getElementById("rodzaj")
'Change the value of the dropdown
nodeDropDown.Value = 26
'Trigger the html change event of the dropdown
Call TriggerEvent(doc, nodeDropDown, "change")
'Wait to load the page new after changing the dropdown value
Application.Wait (Now + TimeSerial(0, 0, 5))
doc.getElementById("miasto").Value = "XYZ"
doc.getElementById("nazwa_sprzedawca").Value = "XYZ"
doc.getElementById("ulica_sprzedawca").Value = "XYZ"
End Sub
这是触发html事件的程序
Private Sub TriggerEvent(htmlDocument As Object, htmlElementWithEvent As Object, eventType As String)
Dim theEvent As Object
htmlElementWithEvent.Focus
Set theEvent = htmlDocument.createEvent("HTMLEvents")
theEvent.initEvent eventType, True, False
htmlElementWithEvent.dispatchEvent theEvent
End Sub
我对 VBA 和 HTML 很陌生。我尝试编写一个 VBA 宏来填写网络表单。 我对必须从下拉列表中选择 select 值感到震惊。
Sub test()
Dim IE As Object
Set IE = CreateObject("InternetExplorer.Application")
IE.Visible = True
IE.Navigate ("https://www.fakturowo.pl/wystaw")
Do While IE.ReadyState <> READYSTATE_COMPLETE
Loop
Set doc = IE.Document
doc.getElementById("rodzaj").Value = 26
doc.getElementById("miasto").Value = "XYZ"
doc.getElementById("nazwa_sprzedawca").Value = "XYZ"
doc.getElementById("ulica_sprzedawca").Value = "XYZ"
这是 HTML:
<select name='rodzaj' id="rodzaj" onchange="javascript:submit();">
<option value='47'>Dobowy raport fiskalny</option>
<option value='24'>Dowód dostawy</option>
<option value='27'>Dowód dostawy (tylko ilość)</option>
<option value='7'>Dowód wewnętrzny</option>
<option value='42'>Eksport towarów</option>
<option value='48'>Eksport usług</option>
<option value='49'>Eksport usług (VAT-EU 28b)</option>
<option value='62'>Faktura</option>
<option value='21'>Faktura (bez vat, dawny rachunek)</option>
<option value='45'>Faktura (odwrotne obciążenie bez vat)</option>
<option value='35'>Faktura (odwrotne obciążenie z vat)</option>
<option value='69'>Faktura MPP (mechanizm podzielonej płatności)</option>
<option value='0' selected>Faktura VAT</option>
<option value='44'>Faktura VAT MP</option>
<option value='26'>Faktura VAT RR</option>
<option value='5'>Faktura VAT marża</option>
非常感谢! 戈西亚
您必须触发下拉菜单的 html 更改事件。为此,您必须将 html 下拉元素保存为一个对象变量。所以你可以把它交给需要的函数来触发 html 事件。
相关代码部分我已经注释了:
Sub test()
Dim IE As Object
Dim nodeDropDown As Object 'Needed to set the dropdown as DOM Object
Dim doc As Object
Set IE = CreateObject("InternetExplorer.Application")
IE.Visible = True
IE.Navigate ("https://www.fakturowo.pl/wystaw")
Do While IE.ReadyState <> 4: DoEvents: Loop
Set doc = IE.Document
'set the dropdown as DOM object
Set nodeDropDown = doc.getElementById("rodzaj")
'Change the value of the dropdown
nodeDropDown.Value = 26
'Trigger the html change event of the dropdown
Call TriggerEvent(doc, nodeDropDown, "change")
'Wait to load the page new after changing the dropdown value
Application.Wait (Now + TimeSerial(0, 0, 5))
doc.getElementById("miasto").Value = "XYZ"
doc.getElementById("nazwa_sprzedawca").Value = "XYZ"
doc.getElementById("ulica_sprzedawca").Value = "XYZ"
End Sub
这是触发html事件的程序
Private Sub TriggerEvent(htmlDocument As Object, htmlElementWithEvent As Object, eventType As String)
Dim theEvent As Object
htmlElementWithEvent.Focus
Set theEvent = htmlDocument.createEvent("HTMLEvents")
theEvent.initEvent eventType, True, False
htmlElementWithEvent.dispatchEvent theEvent
End Sub