Automação do Internet Explorer com eventos de entrada do VBA
Estou tentando usar a automação do Microsoft Access 2003 para controlar o Internet Explorer 9 para concluir um formulário usando dados do banco de dados.
A entrada dispara um evento no navegador que valida os dados e torna visível o botão salvar. Se eu usar sendkeys, o evento é acionado; no entanto, eu encontrei sendkeys para ser muito confiável. Se eu alterar o valor do elemento e, em seguida, usar .fireevent ("onchange"), nada acontece - nem mesmo um erro.
Minha pergunta é: como faço para disparar o evento? Ou, como posso descobrir o que o javascript está executando. Existe um tipo de depuração do addin para o IE, que me dirá qual evento é disparado? Em caso afirmativo, posso apenas executar o script sozinho?
Meu código está abaixo.
<code> Set IE = CreateObject("internetexplorer.application") IE.Visible = True IE.Navigate "https://extranet.website.com/Planning/Edition/Periodic?language=en" Do While IE.ReadyState <> 4 Or IE.Busy = True DoEvents Loop 'log in If IE.Document.Title = "website- access" Then IE.Document.getElementById("login_uid").Value = "username" IE.Document.getElementById("login_pwd").Value = "password" IE.Document.all("ButSubmit").Click Do While IE.ReadyState <> 4 Or IE.Busy = True DoEvents Loop End If Do While Not RstAvailability.EOF StartDate = RstAvailability!AvailDate IE.Document.getElementById("periodStart").Value = Format(StartDate, "dd mmm yy") IE.Document.getElementById("periodEnd").Value = Format(StartDate, "dd mmm yy") Set LinkCollection = IE.Document.GetElementsByTagName("A") For Each link In LinkCollection If link.innertext = "Add" Then link.Click Exit For End If Next Do While IE.ReadyState <> 4 Or IE.Busy = True DoEvents Loop Set objRows = IE.Document.GetElementsByTagName("tr") If RstAvailability!RoomType = "DTW" Then n = 0 While n < objRows.Length If Trim(objRows(n).Cells(0).innertext) = "Single Room" Then For i = 1 To 7 'objRows(n).FireEvent ("onchange") 'objRows(n).Cells(i).GetElementsByTagName("input")(0).Focus 'SendKeys Format(RstAvailability!roomcount - RstAvailability!RoomsSold, "0") & "{TAB}" objRows(n).Cells(i).GetElementsByTagName("input")(0).Value = Format(RstAvailability!roomcount - RstAvailability!RoomsSold, "0") objRows(n).Cells(i).GetElementsByTagName("input")(0).fireevent ("onchange") Do While IE.ReadyState <> 4 Or IE.Busy = True DoEvents Loop Next i End If n = n + 1 Wend End If Set objButtons = IE.Document.getelementsbyname("savePlanning") objButtons(0).Click Do While IE.ReadyState <> 4 Or IE.Busy = True DoEvents Loop newtime = Now + TimeValue("0:00:10") Do While True If Now > newtime Then Exit Do Loop RstAvailability.MoveNext Loop </code>
O html dos campos de entrada são:
<code><tr class="first" roomId="30494" articleId="0" type="Availability" readonly="False"> </code>
<code><div> <span class="roomName"> Single Room </span> </div> </code>
<code><span class="data"> </code>
<code><input id="Availabilities" name="Availabilities" type="text" value="" /> </code>
<code></span> </code>
<code><span class="data"> </code>
<code><input id="Availabilities" name="Availabilities" type="text" value="" /> </code>
<code></span> </code>
Obrigado!