Sub WebTry()
Dim objIE As Object 'special object variable representing the IE browser
Dim l As Object 'special object variable for an <a> (link) element
Set objIE = CreateObject("INTERNETEXPLORER.Application")
objIE.Visible = True
sUser = "username"
sPass = "password"
objIE.navigate "https://mywebsitecomeshere"
Do While objIE.busy = True Or objIE.readystate <> 4: DoEvents: Loop
objIE.document.all.Item("USER").Value = sUser
objIE.document.all.Item("PASSWORD").Value = sPass
objIE.document.all.Item("loginbtn").Click
Do While objIE.busy = True Or objIE.readystate <> 4: DoEvents: Loop
objIE.document.all.Item("image5").Click
Do While objIE.busy = True Or objIE.readystate <> 4: DoEvents: Loop
End
objIE.document.all.Item("image5").Click
行时出现错误
我的实际要求是,它将登录到一个网站(使用凭据)。然后它应该自动点击网站上的另一个按钮(<img id="image5" src="https://abc/cde/efg" alt="Time" name="image5"> </img>
)
请帮忙,因为我是VBA的新手,
提前致谢
答案 0 :(得分:1)
在文档完全加载之前,我使用VB / VBA访问IE元素之前看到过这个错误。显然,readystate属性并不总是按照你认为应该的方式工作。
单击应该在文档中的元素的最安全的方法是等到实际可以引用它。
作为一种保护措施,从对象重新命名或不存在的可能性来看,你应该将循环限制为3次左右。
在模块顶部插入延迟功能:
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
点击此行前的图片:
objIE.document.all.Item("image5").Click
添加检查元素ID的代码:
Dim numTries As Integer
Do While IsNull(objIE.Document.getelementbyid("image5"))
numTries = numTries + 1
If numTries > 3 Then Exit Do
DoEvents
Sleep 1000 ' Delay one second
Loop
If IsNull(objIE.Document.getelementbyid("image5")) Then
Msgbox "No Image5 Found"
Endif