2015-05-12 11 views
1

使用Excel 2013可以登录网站并自动更改数据。通过VBA代码手动循环将数据输入网站,但单击按钮不会

以下代码完美地打开网站,输入用户名和密码,“登录”,然后打开下一个屏幕。

然后它应该在新屏幕上填充另外两个框,但不是。它产生一个运行时错误,说“对象是必需的”。

但是,如果我从错误行按“Debug”和“step through”,代码将完美运行!感激

收到

Option Explicit 

Sub EnterWeb() 

Dim IE As Object 
Set IE = CreateObject("InternetExplorer.Application") 

Dim uRl As String 
Dim UserN As Object 'MSHTML.IHTMLElement 
Dim PW As Object 'MSHTML.IHTMLElement 
Dim CoNum As Object 'MSHTML.IHTMLElement 
Dim AuthCode As Object 'MSHTML.IHTMLElement 

Dim SUBMIT As Object 'MSHTML.IHTMLElement 

'STAGE 1 - LOG INTO THE WEBSITE 

'Set the website 
    uRl = "WEBSITE NAME GOES HERE" 

    With IE 
    .navigate uRl 
    .Visible = True 
    End With 

' loop until the page finishes loading 
    Do While IE.Busy 
    Loop 

'Enter User name in "e-mail" textbox 
    Set UserN = IE.document.getElementByID("email") 
    If Not UserN Is Nothing Then 
    UserN.Value = "TEXT GOES HERE" 
    End If 

'Enter Password in "Password" textbox 
    Set PW = IE.document.getElementByID("seccode") 
    If Not PW Is Nothing Then 
    PW.Value = "TEXT GOES HERE" 
    End If 

'Sign in to site 

Dim Item As Object 

Set Item = IE.document.getElementsByClassName("button positive regular") 
    Item.Item(0).Click 

'STAGE 2 -ENTER DETAILS ON NEXT PAGE 

'Enter in First textbox 
'THIS IS WHERE THE PROBLEM STARTS. 
'RUNNING MACRO AUTOMATICALLY GENERATES A RUNTIME ERROR 424 - "OBJECT REQUIRED" 
'BUT STEPPING THROUGH USING F8 IT RUNS PERFECTLY 
    Set CoNum = IE.document.getElementByID("PUTS ID HERE") 
    If Not CoNum Is Nothing Then 
    CoNum.Value = "PUTS VALUE HERE" 
    End If 

'Enter Code in textbox 
    Set AuthCode = IE.document.getElementByID("PUTS CODE HERE") 
    If Not AuthCode Is Nothing Then 
    AuthCode.Value = "PUTS TEXT HERE" 
    End If 

End Sub 

所有建议Ochimus

+0

如果它在Debug中工作,但不是在直通时运行,那么您可能会遇到计时问题。您可能需要等待页面上的某个事件才能完成。例如,您在第2阶段之前单击该按钮后不需等待。您需要等待*每次您*导航。 –

回答

0

延长等待期包括.readtState,并允许通过消息队列泵处理,而不是锁定它。

Do While IE.Busy or ie.readystate <> 4 'READYSTATE_COMPLETE = 4 
    doevents 
Loop 

您在“点击”后也不会等待。在.Click之后以及在开始尝试Set对象之前放置另一个这样的对象。

这应该确保您收到标准页面。如果在满足这些条件时尚未到达动态内容,则还有其他方法可以实施。

+0

@tim,非常感谢您看到这个问题,现在工作顺利,但无疑在这个过程中还会遇到其他挑战! – Ochimus

相关问题