Select an option from a dropdown in IE and triggering a function

Viewed 611

So, I am a newbiew in IE Automation for VBA.I will try to be very specific about my question. Recently, I have been trying to login to a website and then select a month from a dropdown list. I am able to select an option from the dropdown. However, when I click on the search Button, Results appear not for the values which I selected using VBA, but for the values that were originally there on the webpage. Normally, if one goes to the website, he has to click on the dropdown and select the relevant period and then click on the search button. I also tried FireEvent "onchange", but that does not seem to have any effect. I am attaching the relevant part of the VBA and also the related HTML.

Please guide how can I select the period.

VBA code:

Set e = IE.document.getElementsByName("fin")(0)
 e.Focus
 e.selectedIndex = 1
 e.FireEvent ("onchange")

HTML:

<select name="fin" class="form-control ng-pristine ng-not-empty ng-valid ng-valid-required ng-touched" 
data-ng-model="finyr" data-ng-options="item.year for item in years"
value="item.year" data-ng-change="hidedata()" required="">
<option label="2019-20" value="object:143" selected="selected">2019-20</option>
<option label="2018-19" value="object:144">2018-19</option>
<option label="2017-18" value="object:145">2017-18</option>
<option label="2020-21" value="object:146">2020-21</option></select>
1 Answers

There can be two ways. The first is, you can set the needed parameters in the url. Than you don't need the step you want to do here. That solution works if the page uses Get to communicate with the server. If it uses Post, you must do your step you ask for.

You can check if it works via url parameters by doing all needed steps manualy. After that, look in the url you find in the browser. If there is a list of parameters, it beginns with a questionmark (?). All following parameters beginn with an ampersand (&).

If you must do it via code try the following:

Sub SelectFromDropdown()

  Dim url As String
  Dim browser As Object
  Dim nodeSelect As Object

  url = "Your url here"

  'Initialize Internet Explorer, set visibility,
  'call URL and wait until page is fully loaded
  Set browser = CreateObject("internetexplorer.application")
  browser.Visible = True
  browser.navigate url
  Do Until browser.readyState = 4: DoEvents: Loop

  'Get the dropdown and select the wanted entry by index
  'Indexes beginn with 0
  '(Code lines from your question)
  Set nodeSelect = browser.document.getElementsByName("fin")(0)
  nodeSelect.selectedIndex = 1

  'It is likely that the change to the page must be communicated
  'via an HTML event. This is probably the change event
  'FireEvent doesn't work on most pages
   Call TriggerEvent(browser.document, nodeSelect, "change")
End Sub

This procedure to trigger the html event:

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
Related