如何解析对象变量或使用未在此代码中设置的块变量

时间:2016-09-11 16:33:15

标签: vba excel-vba excel

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的新手, 提前致谢

1 个答案:

答案 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