VBA代码偶尔会停滞在DoEvents中。

3

我的代码很简单。它浏览不同的URL以获取不同的工作表,并从每个URL导入两个数据。

Public Sub import_Data()

Dim ie As InternetExplorer, htmlDoc As HTMLDocument
Dim price As String, volume As String
Dim sheet As Integer
Dim link(14), URL As String

'URL to navigate
link(1) = "https://hk.finance.yahoo.com/q?s=0017.HK&ql=0"
link(2) = "https://hk.finance.yahoo.com/q?s=0151.HK&ql=0"
link(3) = "https://hk.finance.yahoo.com/q?s=0267.HK&ql=0"
link(4) = "https://hk.finance.yahoo.com/q?s=0494.HK&ql=0"
link(5) = "https://hk.finance.yahoo.com/q?s=0700.HK&ql=0"
link(6) = "https://hk.finance.yahoo.com/q?s=0857.HK&ql=0"
link(7) = "https://hk.finance.yahoo.com/q?s=0883.HK&ql=0"
link(8) = "https://hk.finance.yahoo.com/q?s=0939.HK&ql=0"
link(9) = "https://hk.finance.yahoo.com/q?s=0992.HK&ql=0"
link(10) = "https://hk.finance.yahoo.com/q?s=1088.HK&ql=0"
link(11) = "https://hk.finance.yahoo.com/q?s=1398.HK&ql=0"
link(12) = "https://hk.finance.yahoo.com/q?s=1880.HK&ql=0"
link(13) = "https://hk.finance.yahoo.com/q?s=3328.HK&ql=0"
link(14) = "https://hk.finance.yahoo.com/q?s=3988.HK&ql=0"

Set ie = New InternetExplorer
ie.Visible = True

For sheet = 1 To 14
    Worksheets(sheet).Activate

'Go to different URL for different worksheets  
    URL = link(sheet)
    ie.navigate URL

    Do Until ie.readyState = READYSTATE_COMPLETE
       DoEvents
    Loop

    Set htmlDoc = ie.document

'pull two data from url  
    price = htmlDoc.getElementsByClassName("time_rtq_ticker")(0).innerText
    volume = htmlDoc.getElementsByClassName("yfnc_tabledata1")(9).innerText

    Cells(22, 2) = price
    Cells(22, 3) = volume

Next sheet

End Sub

奇怪的是,对于每个URL,有时可以成功地导入2个数据,但有时会卡在“DoEvents”行。

代码有什么问题?为什么有时它可以工作,但有时无法完全失败?请问有人能帮我解决这个问题吗?


你在 VBA > 工具 > 引用 中选择了哪些引用? - Gary's Student
除了那些默认设置,我还选择了Microsoft HTML对象库和Microsoft Internet控件。 - JJC
1个回答

1
我运行了你的代码,它能正常工作......只是非常慢......问题是代码一遍又一遍地重新导航到finance.yahoo......网站中有很多垃圾(广告等)必须一遍又一遍地重新加载。
为了加速这个过程:
  • 导航到该网站
  • 使用互联网控件指示IE选择适当的数据(就像你手动操作一样)
  • 像你现在所做的那样存储那些数据。

1
谢谢您的回复。确实很慢...我想做的是获取即时股票报价。我对VBA还很陌生。您能详细解释一下您的三个建议吗? - JJC
@JJC .....我同意这应该是可能的........毕竟,如果手机可以即时获取信息,为什么电脑不行呢 ?? - Gary's Student
顺便说一下,我真的卡在了doevents上。通常,它可以浏览2到3个网址,有时甚至超过10个,但它永远无法运行完整个代码。当我在调试器中按下中断时,它会停在doevents处。 - JJC

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接