Como interagir com sites usando VBA e Internet Explorer - Parte III

Nesta terceira parte, escrevo sobre como selecionar valores em um CheckBox, Radio Button, ComboBox e ListBox.

Como interagir com sites usando VBA e Internet Explorer - Parte III
Este post foi originalmente publicado em http://officevbavsto.blogspot.com/2011/02/vba-internet-acessando-sites-da-web_27.html

Nesta terceira parte, escrevo sobre como selecionar valores em um CheckBox, Radio Button, ComboBox e ListBox.

Checkbox

Vamos utilizar como exemplo o código fonte HTML abaixo:

<input type="checkbox" name="vehicle" value="Bike" /> I have a bike<br />
<input type="checkbox" name="vehicle" value="Car" /> I have a car

Existem diversas formas de selecionar um valor em um CheckBox, mas vamos a mais simples por enquanto:

Sub AcessaPagina()

  Dim ie As InternetExplorer
  Set ie = New InternetExplorer
  ie.Navigate "http://users5.nofeehost.com/BackOfficeSite/"
  ie.Visible = True
  ie.Document.All.Item("vehicle").Item(1).Checked = True

End Sub

Este código seleciona o segundo item no checkbox.

  • vehicle: é o nome do grupo do CheckBox, ou melhor, da propriedade Name do CheckBox.
  • Item(1): é o item que eu desejo selecionar. O número 1 (um) significa o segundo item, pois Item é um método com índice baseado em zero [1], ou seja, o primeiro item é o Item(0).

Outra forma é omitindo o método Item:

Sub AcessaPagina()

   Dim ie As InternetExplorer
   Set ie = New InternetExplorer
   ie.Navigate "http://users5.nofeehost.com/BackOfficeSite/"
   ie.Visible = True

   ie.Document.All.Item("vehicle")(1).Checked = True
   
End Sub

Em seguida, podemos também utilizar o método getElementsByName:

Sub AcessaPagina()

   Dim ie As InternetExplorer
   Set ie = New InternetExplorer
   ie.Navigate "http://users5.nofeehost.com/BackOfficeSite/"
   ie.Visible = True

   ie.Document.getElementsByName("vehicle")(1).Checked = True

End Sub

Radio Button

É o mesmo código utilizado quando se seleciona no CheckBox:

Sub AcessaPagina()
   Dim ie As InternetExplorer
   Set ie = New InternetExplorer
   ie.Navigate "http://users5.nofeehost.com/BackOfficeSite/"
   ie.Visible = True

   ie.Document.All.Item("sex").Item(1).Checked = True

End Sub

ComboBox e ListBox

O código fonte HTML de exemplo é o seguinte:

<select name="cars">
  <option value="volvo">Volvo</option>
  <option value="saab">Saab</option>
  <option value="fiat">Fiat</option>
  <option value="audi">Audi</option>
</select>

Agora, vamos ao código VBA:

Sub AcessaPagina()

   Dim ie As InternetExplorer
   Set ie = New InternetExplorer
   ie.Navigate "http://users5.nofeehost.com/BackOfficeSite/"
   ie.Visible = True

   ie.Document.All.Item("cars").Item(1).Selected = True

End Sub

É quase o mesmo código utilizado para CheckBox e RadioButton. A diferença é que utilizo a propriedade Selected ao invés de Checked.

Para interagir com o ListBox, deve-se utilizar o mesmo código fonte HTML que o Combobox. A diferença é a propriedade size do código fonte HTML que é alterada.

Veja o código-fonte HTML do ListBox:

<select name="drop1" id="Select1" size="4">
  <option value="1">item 1</option>
  <option value="2">item 2</option>
  <option value="3">item 3</option>
  <option value="4">item 4</option>
  <option value="0">All</option>
</select>

O código VBA ficaria da seguinte forma:

Sub AcessaPagina()

   Dim ie As InternetExplorer
   Set ie = New InternetExplorer
   ie.Navigate "http://users5.nofeehost.com/BackOfficeSite/"
   ie.Visible = True

   ie.Document.All.Item("drop1").Item(1).Selected = True

End Sub

E quando o ListBox permite múltipla seleção de valores? Acrescente mais uma linha de código selecionando o valor:

Sub AcessaPagina()

   Dim ie As InternetExplorer
   Set ie = New InternetExplorer
   ie.Navigate "http://users5.nofeehost.com/BackOfficeSite/"
   ie.Visible = True

   ie.Document.All.Item("drop1").Item(0).Selected = False
   ie.Document.All.Item("drop1").Item(1).Selected = True
   ie.Document.All.Item("drop1").Item(3).Selected = True

End Sub

O código fonte HTML de um ListBox com múltipla seleção é o seguinte:

<select name="drop1" id="Select1" size="4" multiple="multiple">
  <option value="1">item 1</option>
  <option value="2">item 2</option>
  <option value="3">item 3</option>
  <option value="4">item 4</option>
  <option value="0">All</option>
</select>

Melhores práticas

Os exemplos demonstrados acima não são otimizados. Isto é, referenciar o item do CheckBox, RadioButton, ListBox ou ComboBox pelo seu indice (item(1), por exemplo) é passível de erro. O desenvolvedor do site pode alterar a ordem dos itens no ComboBox ou o item que você está selecionando não existir mais.

Utilize o seguinte código então:

Sub AcessaPagina()

   Dim ie As InternetExplorer
   Set ie = New InternetExplorer

   Dim obj As Object

   ie.Navigate "http://users5.nofeehost.com/BackOfficeSite/"
   ie.Visible = True

   For Each obj In ie.Document.All.Item("drop1").Options
       If obj.innertext = "item 3" Then
           obj.Selected = True
       End If
   Next obj

End Sub

Estou percorrendo todas as opções do ListBox e verifico se o texto corresponde ao que eu quero selecionar. Caso positivo eu o seleciono. Este código se aplica ao ComboBox também.

Agora, para o RadioButton e CheckBox usamos o seguinte código:

Sub AcessaPagina()

   Dim ie As InternetExplorer
   Set ie = New InternetExplorer

   Dim obj As Object

   ie.Navigate "http://users5.nofeehost.com/BackOfficeSite/"
   ie.Visible = True

   For Each obj In ie.Document.All.Item("sex")
       If obj.Value = "female" Then
           obj.Checked = True
       End If
   Next obj

End Sub

O que muda é que não uso a propriedade innerText para comparar valores, mas a propriedade Value e não utilizo nenhuma propriedade indicando subitens do All.Item("sex"), mas referencio direto. Quero dizer com isso, não utilizo algo do tipo All.Item("sex").Options ou All.Item("sex").Items (não existem e gera erro se você tentar desta forma).

Créditos

Photo by Pixabay from Pexels

comments powered by Disqus

Read more