2017-11-07 1 views
1

Ich versuche, ein Makro auf VBA zu Yahoo zu machen. Aber ich habe Probleme, auch das Passwort zu übermitteln, da sich Benutzername/Passwort auf verschiedenen Seiten befinden.VBA Yahoo Login

Ich halte den Fehler zu erhalten

Laufzeitfehler '424' Objekt erforderlich

auf der .Document.getElementById("login-passwd").Value Linie.

Sub WebLogin() 
Set IE = CreateObject("InternetExplorer.Application") 

With IE 
    .Visible = True 
    .Navigate "https://login.yahoo.com/" 
    Do Until .ReadyState = READYSTATE_COMPLETE 
     DoEvents 
    Loop 
    .Document.getElementById("login-username").Value = "username" 
    .Document.getElementById("login-signin").Click 
    Do Until .ReadyState = READYSTATE_COMPLETE 
     DoEvents 
    Loop 
    'Application.Wait (Now + TimeValue("0:00:10")) 
    .Document.getElementById("login-passwd").Value = "password*" 
    .Document.getElementById("login-signin").Click 
End With 

End Sub 

Ich stelle mir vor, dass das HTML-Element nicht gefunden beeing, aber ich habe bereits versucht, eine Verzögerung geben, die einen anderen Code der Seite gewartet zu laden und zu nichts zu arbeiten seens.

Hier sind die spezifischen HTML-Code für beide Felder.

<input name="username" tabindex="1" class="phone-no " id="login-username" autofocus="true" type="text" placeholder="Insira seu e-mail" value="" autocorrect="off" autocapitalize="none"> 
<input type="password" id="login-passwd" name="password" placeholder="Senha" autofocus=""> 

Irgendwelche Vorschläge?

Antwort

0

Laufzeitfehler ‚424‘ erhöht wird, weil IE.Document.getElementById("login-passwd") nicht vorhanden ist, und Sie versuchen, seine .Value

Fehler bei VBA Handhabung für den Zugriff auf mit Etiketten gemacht, und kann ziemlich hässlich ziemlich schnell zu bekommen.

Sie benötigen ein Etikett zu definieren, und eine On Error Anweisung

Lassen Sie uns dieses Unterprogramm definieren:

Sub WaitAndFeed(ByRef IE, ByVal field As String, ByVal value As String) 
    On Error GoTo NoObjErr 
    While Not (IE.Document.getElementById(field) Is Nothing) 
    NoObjErr: 
     DoEvents 
     IE.Document.getElementById(field).Value = value 
     IE.Document.getElementById("login-signin").Click 
    Wend 
End Sub 

Der Code sollte nun geändert werden:

Sub WebLogin() 
    Set IE = CreateObject("InternetExplorer.Application") 

    With IE 
     .Visible = True 
     .Navigate "https://login.yahoo.com/" 
     Do Until .ReadyState = READYSTATE_COMPLETE 
      DoEvents 
     Loop 
    End With 
    Call WaitAndFeed(IE, "login-username", "username") 
    Call WaitAndFeed(IE, "login-passwd", "password") 
End Sub 
+0

Vielen Dank für Ihre Hilfe. Ich lerne VBA on the fly, immer noch auf Grundlagen. Ich habe Ihren Code ausprobiert, und es wirft genau den gleichen Fehler auf und macht genau dasselbe wie zuvor. Beachten Sie, dass Sie den Benutzernamen eingeben, abschicken und abstürzen, bevor Sie das Passwort eingeben. – Arank

+0

Ich denke, es fehlt ein warten, bis bereit, nach der Übermittlung des Benutzernamens, nicht wahr? Da beide Felder auf verschiedenen Seiten sind. Aber ich habe das versucht und auch nicht funktioniert. – Arank

+0

Auch das richtige ist "login-passwd" oder? Das habe ich aber auch mit Erfolg versucht. – Arank