Internet Explorer-Automatisierung mit VBA-Eingabeereignissen
Ich versuche, die Automatisierung in Microsoft Access 2003 zu verwenden, um Internet Explorer 9 so zu steuern, dass ein Formular mit Datenbankdaten ausgefüllt wird.
Die Eingabe löst im Browser ein Ereignis aus, das die Daten validiert und die Schaltfläche Speichern sichtbar macht. Wenn ich sendkeys benutze, wird das Ereignis ausgelöst; Ich habe jedoch festgestellt, dass Sendkeys sehr unzuverlässig sind. Wenn ich den Wert des Elements ändere und dann .fireevent ("onchange") verwende, passiert nichts - nicht einmal ein Fehler.
Meine Frage ist, wie ich das Ereignis auslöse. Oder wie kann ich herausfinden, welches Javascript läuft? Gibt es einen Debug-Typ von Add-In für den IE, der mir sagt, welches Ereignis ausgelöst wird? Wenn ja, kann ich das Skript einfach selbst ausführen?
Mein Code ist unten.
<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>
Die HTML der Eingabefelder sind:
<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>
Vielen Dank!