首页 > 解决方案 > 填写网络表单时从下拉列表中选择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>

非常感谢!戈西亚

标签: htmlexcelvbadrop-down-menu

解决方案


您必须触发下拉菜单的 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

推荐阅读