【问题标题】:VBA code stuck in doevents occasionallyVBA 代码偶尔会卡在 doevents 中
【发布时间】:2016-05-30 14:53:42
【问题描述】:

我的代码很简单。它为不同的工作表导航不同的 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 > 工具 > 参考文献中选择了哪些参考文献 ??
  • 除了这些默认设置,我还选择了 Microsoft HTML Object Library 和 Microsoft Internet Controls。

标签: vba excel import


【解决方案1】:

我运行了你的代码,它运行良好............只是非常缓慢......问题是代码重新导航并且转到finance.yahoo .......网站中有很多垃圾(广告等),必须一遍又一遍地重新加载。

加快速度:

  • 导航到该站点一次
  • 使用 Internet 控件引导 IE 选择适当的数据(您只需手动操作)
  • 像现在一样存储这些数据。

【讨论】:

  • 感谢您的重播。确实很慢......我想要做的实际上是获得即时股票报价。我对 VBA 很陌生。请您详细解释您的三个建议吗?
  • @JJC .....我同意这应该是可能的......毕竟,如果手机可以获取即时信息,为什么不能电脑??
  • 顺便说一句,我真的被doevents卡住了。通常,它可以导航 2 到 3 个 url,有时甚至超过 10 个,但它永远无法运行完整的代码。当我在调试器中按下 break 时,它会在 doevents 处停止。
猜你喜欢
  • 1970-01-01
  • 2019-01-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-02-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多