VBA Выберите из раскрывающегося списка при заполнении веб-формы - PullRequest
0 голосов
/ 05 августа 2020

Я новичок в 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>

Большое спасибо! Гося

1 Ответ

0 голосов
/ 05 августа 2020

Вы должны вызвать событие изменения 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
...