Automatización de Internet Explorer con eventos de entrada VBA
Estoy tratando de usar la automatización desde Microsoft Access 2003 para controlar Internet Explorer 9 para completar un formulario usando datos de la base de datos.
La entrada activa un evento en el navegador que valida los datos y hace que el botón Guardar esté visible. Si uso sendkeys, el evento se activa; sin embargo, he encontrado que las claves de envío son muy poco confiables. Si cambio el valor del elemento y luego uso .fireevent ("onchange"), no ocurre nada, ni siquiera un error.
Mi pregunta es, ¿cómo puedo despedir el evento? O, ¿cómo puedo saber qué javascript está ejecutando. ¿Hay un tipo de complemento de depuración para IE que me diga qué evento se activa? Si es así, ¿puedo ejecutar el script yo mismo?
Mi código está abajo.
<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>
Los html de los campos de entrada son:
<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>
¡Gracias!