I have code which picks up data from multiple columns from ThisWorkbook and puts in various field in website in internet explorer. The website loads after clicking on <
I think the error is thrown because the doc
is changed.
Rewrite
' This is the Line2
doc.getElementById("ContentPlaceHolder1_GridView1_chkboxSelectAll").Click
'Wait 3 seconds till it selects all the checkboxes
Application.Wait DateAdd("s", 3, Now)
as
' This is the Line2
application.wait Application.Wait DateAdd("s", 1, Now)
set doc = IE.document
doc.getElementById("ContentPlaceHolder1_GridView1_chkboxSelectAll").Click
'Wait 3 seconds till it selects all the checkboxes
Application.Wait DateAdd("s", 3, Now)
maybe helpful.
Use proper page load waits after each .Navigate
and .Click
.
While ie.Busy Or ie.readyState < 4: DoEvents: Wend
Also, you can wrap elements that are throwing errors, related to timings, in timed loops which attempt to set the object reference
Dim t As Date, ele As Object
Const MAX_WAIT_SEC As Long = 10
t = Timer
Do
On Error Resume Next
Set ele = doc.getElementById("ContentPlaceHolder1_GridView1_chkboxSelectAll")
On Error GoTo 0
If Timer - t > MAX_WAIT_SEC Then Exit Do
Loop While ele Is Nothing
If Not ele Is Nothing Then
ele.Click
End If
I have removed below wait loop after line 1.
'Wait till it loads
Do While IE.Busy
Application.Wait DateAdd("s", 5, Now)
Loop
and added fix 10 seconds wait time Application.Wait DateAdd("s", 10, Now)
just before
doc.getElementById("ContentPlaceHolder1_GridView1_chkboxSelectAll").Click
'Wait 3 seconds till it selects all the checkboxes
Application.Wait DateAdd("s", 3, Now)
So the final piece of code is as below and it's working!
'This is the Line1
doc.getElementById("ContentPlaceHolder1_search").Click
'Checkbox select all
'This is the Line2
Application.Wait DateAdd("s", 10, Now)
doc.getElementById("ContentPlaceHolder1_GridView1_chkboxSelectAll").Click
'Wait 3 seconds till it selects all the checkboxes
Application.Wait DateAdd("s", 3, Now)