1
votes

Comment puis-je demander à VBA de soumettre un formulaire javascript?

Je ne sais pas si je fais référence correctement au bouton. Je continue à recevoir:

Erreur d'exécution '438': l'objet ne prend pas en charge cette propriété ou méthode.

Voici à quoi ressemble mon code pour le moment:

  https://indexcalculator.ftserussell.com/

La page Web que j'utilise est:

Sub russInd()
    Dim oButton As Object, HTMLdoc As Object
    Dim sht1 As Worksheet, myURL As String
    Set ie = CreateObject("InternetExplorer.Application")
        Set sht1 = Worksheets("Day 1")
        myURL = sht1.Cells(32, 2).Value
        ie.navigate myURL
        ie.Visible = True

        Do Until ie.ReadyState = 4
            DoEvents
        Loop

        'Locate The correct forms and buttons
        Set HTMLdoc = ie.document
        Set oButton = HTMLdoc.querySelectorAll("a[href='javascript:submitForm(document.forms[0].action);']")
        'Check All Checkboxes
        HTMLdoc.getElementByID("chkAll").Click
        oButton.Click
End Sub


9 commentaires

Utilisez du sélénium, il existe une bibliothèque pour VBA :)


querySelectorAll renvoie une collection. Vous voulez probablement querySelector


@mplungjan C'était ça! Merci beaucoup!


Ou plus simple HTMLdoc.getElementById ("CtlNavigation_lblControl"). QuerySele‌ ctor ("a"). Cliquez sur


Ou appelez simplement le formulaire d'envoi


@mplungjan Pour référence future, cela vous dérange-t-il de me dire comment j'appellerais le formulaire de soumission


Peut-être HtmlDoc.querySelector ("form"). Submit ()


.getElementByID ("CtlNavigation_lblControl") ne suffit pas - c'est la plage contenant le lien. Vous avez besoin de .getElementByID ("CtlNavigation_lblControl"). QuerySelector ("a‌") .Cliquez


Et s'excuse pour la "collection" que je voulais dire "nodelist"


3 Réponses :


1
votes

Réglez votre sélecteur sur ceci: (il indique rechercher n'importe quelle image dans un élément A parent.)

Sub russInd()
    Dim oButton As Object, HTMLdoc As Object
    Dim sht1 As Worksheet, myURL As String
    Set ie = CreateObject("InternetExplorer.Application")
        Set sht1 = Worksheets("Day 1")
        myURL = sht1.Cells(32, 2).Value
        ie.navigate myURL
        ie.Visible = True

        Do Until ie.ReadyState = 4
            DoEvents
        Loop

        'Locate The correct forms and buttons
        Set HTMLdoc = ie.document
        Set oButton = HTMLdoc.querySelectorAll("a > img")
        'Check All Checkboxes
        HTMLdoc.getElementByID("chkAll").Click
        oButton.Click
End Sub

Voici le code complet avec la modification:

Set oButton = HTMLdoc.querySelectorAll("a > img")


0 commentaires


1
votes

Utilisez le sélecteur suivant car il fonctionne à travers toutes les étapes. Le nombre d'éléments enfants a dans le parent avec l'ID Ctlnavigation2_lblControl change de sorte que ce qui suit est un moyen robuste d'obtenir toujours ce que vous voulez sur les pages.

HTMLdoc.querySelector("#Ctlnavigation2_lblControl [href*=action]").Click


1 commentaires

La réponse acceptée ne fonctionnera pas à travers vos différentes étapes. Vous voulez cliquer sur suivant à chaque fois et ne pas revenir en arrière dans les étapes ultérieures.