|
楼主 |
发表于 2012-8-5 18:02
|
显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件 ★ 免费下载 ★ ★ 使用帮助★
本帖最后由 liucqa 于 2012-8-5 19:46 编辑
如果你在百度或者Google搜索的话,XMLHTTP异步下载的代码一大堆,但大多使用Doevents来冒充异步,极少有采用onreadystatechange事件句柄的方法来实现。
用Doevents方法对CPU占用较多,从资源的角度来看,失去了异步的好处。并且后继代码不能运行,所以不是真正的异步操作。
在微软的MSDN上提供了三种方法实现OnReadyStateChange事件: http://msdn2.microsoft.com/en-gb/library/ms757030.aspx
1.使用Timer轮询readystate属性
2.使用带WithEvents声明的DomDocument对象load Xml
3.自定义一个类,在类中的方法来处理事件,然后把类赋给XMLHTTP对象的OnReadyStateChange事件
第一个方法不能实现真正的实时异步。
第二个方法,在本论坛有例子 http://club.excelhome.net/thread-760475-1-1.html
此代码我没有测试。
Dim WithEvents objDocument As HTMLDocument
Dim objHtml As New HTMLDocument
Sub ff()
Set objDocument = objHtml.createDocumentFromUrl("http://www.okooo.com/League/LeagueInfoIndex.php?TurnID=" & Cells(2, "i").Text & "&GroupID=2693", vbNullString)
End Sub
Private Sub objDocument_onreadystatechange()
Dim a As Object, i&, j&
Columns("a:h") = ""
If objDocument.readyState = "complete" Then
Set a = objDocument.getElementsByTagName("table")(2).Rows
For i = 1 To a.Length - 1
For j = 0 To a(i).Cells.Length - 1
Cells(i + 2, j + 1) = a(i).Cells(j).innerText
Next
Next
Range("a1") = objDocument.URL
Set objDocument = Nothing
Set objHtml = Nothing
End If
End Sub
本课讲解第三个方法的使用,本方法为真正的异步调用。
|
评分
-
1
查看全部评分
-
|