VBA IE Dropdown aktualisieren

  • VB6

Es gibt 3 Antworten in diesem Thema. Der letzte Beitrag () ist von Joshi.

    VBA IE Dropdown aktualisieren

    Ein freundliches Hallo!

    Versuche auf dieser Seite
    mws-eu.amazonservices.com/scratchpad/index.html
    die erste Dropbox (links oben) API Section zu aktualisieren. Was mir derzeit gelingt, ist die "Beschriftung" zu ändern, es fehlt jedoch noch ein Ereignis, mit dem dann in der zweiten Listbox (darunter) die zulässigen Einträge aktualisiert werden.


    Habe mir folgendes aus verschiedenen Beiträgen zusammenkopiert - als nicht zwingend verstanden :

    Würde mich riesig über einen Hinweise freuen. Auch ein Link zu einer guten Dokumenten würde mir dauerhauft weiterhelfen

    LG & Danke
    Fabian

    Sub ieöffnen()

    Dim objIE As Object
    Set objIE = CreateObject("InternetExplorer.Application")
    objIE.Visible = True
    objIE.Navigate "https://mws-eu.amazonservices.com/scratchpad/index.html"
    Do: Loop Until objIE.Busy = False
    Do: Loop Until objIE.Busy = False

    With objIE.Document
    '--- dropdown api section

    Set DropDown = .getElementById("apisection")
    .getElementById("apisection").Focus
    .getElementById("apisection").selectedIndex = 3
    .getElementById("apisection")(0).Click
    .getElementById("apisection").FireEvent ("onchange")

    end with
    end sub
    Hi.

    VB.NET-Quellcode

    1. .getElementById("apisection").FireEvent ("onchange")


    Kann es sein, daß der Event "change" heist?

    Im Firefox-Webinspektor habe ich an der SELECT ("apisection") ein Eventlistener gesehen namens "change".

    Quellcode

    1. // Initialize the apisection for a change event
    2. $('#apisection').change(function() {
    3. $('#response').addClass('shaded');
    4. $('#apicall option:eq(0)').attr('selected', 'selected');
    5. initApiCalls();
    6. initFields();
    7. });


    Vielleicht hilft das in diesem Fall.

    Eventuell einmal die SelectedIndex zuerst setzen dann den Focus setzen und danach den click feuern.

    Und braucht es wirklich den ".getElementById("apisection")(0).Click" ?

    Geht nicht auch ".getElementById("apisection").Click" ?

    Eventuell einfach den Focus wechseln auf ein anderes element und zurück auf die "apisection".

    Ich hatte öfters beim IE und JQuery einfach werte gesetzt dann den Focus gewechselt und dann auf ein anderes nochmal den Focussetzen, und der triggerte "gelegentlich" die abhängigen Controls an.

    c.u. Joshi
    Hallo Joshi!
    Vorab ein Dankeschön für Deine Mühe.

    Habe die Ratschläge bzgl. der Reihenfolge von SelectedIndex und dem Wechsel des Fokus auf andere Elemente ausprobiert. Leider erfolglos.

    Bin bei der weiteren Suche auf so etwas gestoßen:
    ie.Document.parentWindow.execScript "registrationUpdate()", "JavaScript"
    Vermute, dass man damit ein JS Ereignis auslösen kann. Wenn ich mir jetzt die Seite daraufhin nochmal anschaue:



    dann sehe ich dort ein "event", vermutlich "change".
    Kann aber nicht identifizieren, wie ich dieses Ereignis korrekt aufrufen kann.
    Bräuchte an dieser Stelle noch einmal Unterstützung.

    LG & danke
    Fabian

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „f__s“ ()

    Hi.

    .getElementById("apisection").FireEvent("onchange")

    Einfach zu...

    .getElementById("apisection").FireEvent("change")

    und evtl.

    .Document.FireEvent("registrationUpdate")

    AHHH....

    Ich kann mich nicht erinnern wie die Events auf Dokument-Ebene aufgerufen werden.
    Ausserdem könnte es sein das evtl. Formulare (DOM-Ebene) berücksichtigt werden müssen.

    Also es geht immer einen Event zu feuern, aber wo der liegt innerhalb der DOM-Hirarchie ???

    Das war schnell aus der Hüfte geschossen...

    Edit:

    Wurde schon einmal mit

    VB.NET-Quellcode

    1. webBrowser.InvokeScript("JavaScriptFunctionWithoutParameters")


    experementiert?
    Das ist eigentlich ein Webbrowser IE-Control innerhalb von .net Framework.
    "Das Ding" mit VBA ist mir nicht mehr geläufig, aber...

    Visual Basic-Quellcode

    1. Dim IE As InternetExplorer
    2. 'Hier die Änderungen in den Listboxen/Selects machen oder was immer gewünscht ist
    3. Call IE.document.parentWindow.execScript("change()", "JavaScript") 'hier das change-Event aufrufen
    4. 'Hier evtl. weitere Call für andere Browser-Controls, und evtl. Javascript Variablen setzen
    5. 'Texbox füllen Select Optionindex etc.
    6. 'Hier nun das abschließende Javascript aufrufen (registrationUpdate, ist wohl das letzte script ?!)
    7. Call IE.document.parentWindow.execScript("registrationUpdate()", "JavaScript")


    HTML-Quellcode

    1. <button name="submit" id="submit" onclick="postRequest();">Submit</button>


    Und zum Abschluss, nicht vergessen das Formular abzuschicken mit 'submit'.

    Hoffentlich hilfts...

    Ausserdem habe ich noch hier einen Verdächtigen.

    .Item(0).FireEvent("onclick")

    .Item(0) ist ja nur notwendig, wenn es Wiederholungen eines HTML-Element gibt.

    Ist die ID oder Name oder CSS-Style benannt, kann mit dem index der richtige ausgewählt werden.
    Von oben nach unten innerhalb des DOM-Dokuments wird iterativ hochgezählt für den Index.
    In deinem Fall habe ich das auf die schnelle nicht gesehen, aber kann zu fehlannahmen führen.
    Beispiel: Wenn eine Master-Detail im Formular ist, ändern sich evtl. abhängige Controls die evtl. erst eingefügt werden dur PHP, JavaScript, sogar Browser Addons und schon muss erneut gezählt werden.


    c.u. Joshi

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Joshi“ ()