VBA错误:“运行时错误”424“尝试.getElementById时所需的对象

运行此代码时,我继续得到上述错误。 我已经尝试了几十个网页search和调整来解决,但不成功。 代码如下,任何帮助,如果非常感激。

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 

您没有正确设置文档和login框。

replace这些行:

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

用这些:

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

当您尝试find名称为“username”的元素时,会出现另一个错误,因为该页面上没有这样的元素,但希望这会使您处于正确的轨道上。