html - 填写网络表单时从下拉列表中选择VBA
问题描述
我对 VBA 和 HTML 很陌生。我尝试编写一个填写 Web 表单的 VBA 宏。我感到震惊,我必须从下拉列表中选择值。
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
推荐阅读
- azure - 如何通过 Azure 门户更改 Azure 函数的日志记录详细程度?
- ruby-on-rails - 如何在 rails 视图中访问 render :layout 选项?
- .net - 使用 ADFS 注销 .net 核心项目
- c++ - 如何与 ActiveX exe 通信
- javascript - 护照本地策略不适用于 React
- windows - 如何使用 for /f 在“当前”行暂停
- angular - 如何在流结束之前使打字稿流读取代码不继续?
- c# - C# 遇到 TryParse 问题
- reactjs - 如何在本机反应中打印响应消息
- regex - Golang Regex 匹配并替换某个字符串后的第一次出现