2016-05-30 154 views
2

我的代码很简单。它为不同的工作表导航不同的URL,并从每个URL导入两个数据。VBA代码偶尔卡在doevents中

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”行。

代码有什么问题?为什么它有时会起作用,但并不完全失败?任何人都可以帮助我吗?

+0

您选择了哪些参考* VBA>工具>参考* ** ?? ** –

+0

除了这些默认设置,我还选择了Microsoft HTML对象库和Microsoft Internet控件。 – JJC

回答

2

我跑你的代码,它工作正常............只是非常慢.............问题是,代码重新导航结束和finance.yahoo .......有很多垃圾在网站(广告等),必须重新加载和重复。

加快这:

  • 导航到站点一旦
  • 使用互联网的控制直接IE来选择合适的数据(只是你会手动)
  • 商店数据,就像你现在在做。
+1

谢谢您的重播。这确实很慢......我想要做的是实际获得即时股票报价。我对VBA很陌生。你能详细解释一下你的三条建议吗? – JJC

+0

@JJC .....我同意它应该是可能的.............毕竟,如果手机可以得到即时信息,为什么不能用电脑**? ** –

+0

顺便说一下,我真的被困在doevents。通常,它可以导航2到3个url或有时超过10个,但它永远不会运行完整的代码。当我在调试器中按下break时,它停在doevents处。 – JJC