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!

Antworten auf die Frage(2)

Ihre Antwort auf die Frage