【问题标题】:VBA Select from dropdown list while filling webform填写网络表单时从下拉列表中选择VBA
【发布时间】:2020-11-25 22:41:10
【问题描述】:

我对 VBA 和 HTML 还是很陌生。我尝试编写一个填写网络表单的 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 excel vba drop-down-menu


    【解决方案1】:

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

    【讨论】:

    • 非常感谢您的回答,它真的很有帮助,并且适用于大多数下拉菜单。不幸的是,我发现上面的一个不起作用。你能帮忙吗? (Sprzedawca
    • @Gosia 通过贴出的 html sn -p 可以看到没有 html 下拉菜单。可能它是通过 JS 框架(如 jQery 或 React)使用其他 html 元素创建的。这些下拉菜单的工作方式完全不同,我无法提供一揽子解决方案。
    • 非常感谢!!!我确信这是一个下拉菜单。当你写到这不是时,改变它真的很容易:) 现在一切都很完美,除了下载 PDF 文件(但我认为现在对我来说很难:))
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-10
    • 1970-01-01
    • 2023-04-03
    • 1970-01-01
    • 2018-04-24
    相关资源
    最近更新 更多