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.

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, poisItem
é um método com índice baseado em zero [1], ou seja, o primeiro item é oItem(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).