2014-09-01 202 views
2

运行此代码时,我继续出现上述错误。我尝试了几十次网页搜索和调整以解决问题,但未成功。任何帮助,如果非常赞赏VBA错误:“运行时错误'424'尝试执行.getElementById时所需的对象

Public Sub Tagg() 

    Dim URL As String 
    Dim ie As SHDocVw.InternetExplorer 'MICROSOFT Internet Controls (shdocvw.dll) 
    Dim HTMLdoc As MSHTML.HTMLDocument 'Microsoft HTML Object Library 
    Dim loginFrame As HTMLIFrame 
    Dim usernameInput As HTMLInputElement, passwordInput As HTMLInputElement 
    Dim username As String, password As String 

    username = "MTorres" 'CHANGE THIS 
    password = "melissa1" 'CHANGE THIS 
    URL = "https://webaccess.tagglogistics.com/cadence/webaccess.net?action=203&Full=Y&args=415878" 

    Set ie = New SHDocVw.InternetExplorer 

    With ie 
     .Visible = True 
     .navigate URL 
     Do While .readyState <> READYSTATE_COMPLETE Or .Busy 
      DoEvents 
     Loop 
     Set loginFrame = .document.getElementById("loginframe") ' ****ERROR HERE**** 
     Set HTMLdoc = loginFrame.contentWindow.document 

     '<input name="username" id="uname" class="ti" maxlength="32" onchange="setUserValue();" 
     'onkeydown="setupUserValue(event);" onmouseup="return false;" onclick="SelectAll();" onfocus="SelectAll();" 
     'aria-describedby="cof_username errormsg" type="text"> 

     Set usernameInput = HTMLdoc.getElementsByName("username")(0) 
     usernameInput.Focus 
     DoEvents 
     usernameInput.Value = username 
     usernameInput.FireEvent "onkeydown" 
     usernameInput.FireEvent "onchange" 
     usernameInput.FireEvent "onmouseup" 

     '<input id="cofisso_ti_passw" name="password" class="ti" maxlength="32" aria-describedby="pass" type="password"> 

     Set passwordInput = HTMLdoc.getElementsByName("password")(0) 
     passwordInput.Focus 
     passwordInput.Value = password 

     'HTMLdoc.forms(0).submit 
     '<input src="/resources/images/btn_login.gif" alt="Login" title="Login" name="cofisso_btn_login" id="cofisso_btn_login" type="image"> 
     HTMLdoc.getElementById("cofisso_btn_login").Click 
     Do While .readyState <> READYSTATE_COMPLETE Or .Busy 
      DoEvents 
     Loop 

     '----------- NEW CODE -------------- 

     'Might need this wait loop 
     While .document.readyState <> "complete" 
      DoEvents 
     Wend 

     'Either reload HTMLdoc from current IE.document: 
     Set HTMLdoc = .document 

     'Or if LNKLOGOUT is inside an iframe: 
     '  Dim iframe As HTMLIFrame 
     '  Set iframe = .document.getElementsByTagName("IFRAME")(0)  '0 = 1st iframe 
     '  Set HTMLdoc = iframe.contentWindow.document 

     'HTMLdoc should now be available here - display webpage TEXT TO verify 

     MsgBox HTMLdoc.body.innerText 

     '---------- END OF NEW CODE ---------- 

     'Click "Sign Out" link 
     '<a id="LNKLOGOUT" class="logout" href="https://servicing.capitalone.com/C1/SelfService/CMLogoutIntercept.aspx">Sign Out</a> 
     HTMLdoc.getElementById("LNKLOGOUT").Click 
     Do While .readyState <> READYSTATE_COMPLETE Or .Busy 
      DoEvents 
     Loop 

    End With 

End Sub 
+0

你确定'.document'不是'nothing'吗? – Bathsheba 2014-09-01 15:30:23

+1

VBA中的哪一行发生错误?为了找到答案,请单击错误消息中的“debug”,并且导致问题的行将被突出显示。 – LondonRob 2014-09-01 15:30:30

+0

代码中已经有一条注释,指出发生错误的位置。 – 2014-09-01 15:58:38

回答

0

您没有设置文档和loginframe正确

替换这些行:。

Set loginFrame = .document.getElementById("loginframe") ' ****ERROR HERE**** 
Set HTMLdoc = loginFrame.contentWindow.document 

有了这些:

Set HTMLdoc = ie.Document 
Set loginFrame = HTMLdoc.getElementById("loginframe") ' ****ERROR FIXED**** 

你会得到另一个错误的几行下来,当你试图找到一个名为“用户名”的元素,因为该网页上没有这样的元素,但希望这将让你在正确的跟踪。

相关问题