trouble with onchange event

D

Dudely

I'm not sure where to go with this question so I thought I'd try this
group.

I'm having some trouble with the following VBA code. The varTags
variable is sometimes empty, and sometimes it has what it's supposed
to have. I always use the same set of pages to test.

I thought maybe the page needed time to load, so I added in
Do While obIe.Busy & Do While obIe.readyState <>4
DoEvents loops after the onchange call, but they had no effect.

The onchange call does in fact load the expected page, it's the line
of code afterwards that doesn't always work. Any ideas?

Thank you

Public Function submitDropDownData(IeDoc As Object, obIe As Object,
elementToSelect As Long, elementValue As String, ID As String)
Dim el As Object
Dim varTags as Variant
Dim tagType as String

tagType="td"

Set el = IeDoc.getElementsByName(ID)
el(0).children(elementToSelect).Selected = True
el(0).children(elementToSelect).Value = elementValue
el(0).onchange

Set varTags = IeDoc.getElementsByTagName(tagType)
 
A

AndyM

In this code, the varTags variable would be a collection of <td> tags. Are
there no td tags on the page you are using?
 
D

Dudely

Yes, there are in fact quite a few <td> tags on the page. I've since
determined that sleeping for a length of time resolves the problem as
it gives the page enough time to load. At this point, what I don't
understand is why "Do While obIe.Busy & Do While obIe.readyState <>4"
don't work.

Someone else in another group stated "Quite obvious, there is no
direct HTTP request here."

So it's "quite obvious". Unfortunately, the obnoxious bastard
couldn't be troubled to provide a solution, no doubt because that's
"quite obvious" as well.

Perhaps someone else could provide the obvious solution (that's better
than the one I figured out) to someone as dense as myself.

Thank you
 
A

AndyM

It is possible that your code ("Do While obIe.Busy & Do While obIe.readyState
<>4") is being executed before the HTTP request.

Try this before your code:

Do Until obIe.Busy Or obIe.readyState <> 4
DoEvents
Loop

This will make sure your code will wait until the HTTP request begins. Your
code could get stuck in this loop though, so you would want to add in a time
limit to exit out of the loop.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Top