【问题标题】:Excel 2013 record/refresh live stock dataExcel 2013 记录/刷新实时库存数据
【发布时间】:2014-09-30 19:43:25
【问题描述】:

我正在使用 Excel 2013 尝试从 Yahoo Finance 记录实时股票数据。在我的单元格 A1 中,我有 GoPro 股票代码 GPRO。

单元格 B1 有代码

=WEBSERVICE("http://finance.yahoo.com/d/quotes.csv?s="&A1&"&f=l1")

获取实时股票价格并在单元格 C1 中

=NUMBERVALUE(WEBSERVICE("http://finance.yahoo.com/d/quotes.csv?s="&A1&"&f=l1"))

将从网上得到的字符串值改成数字。我在 VBA 中有一个宏

Sub Capture()
    If I = 0 Then I = 1
    Sheets("recorddata").Cells(1, I) = Sheets("getdata").Range("C1")
    I = I + 1
    Application.OnTime Now + TimeValue("00:00:15"), "Capture"
End Sub

尝试每 15 秒记录一次实时股票价格。由于某种原因,该程序将运行一次并将股票价格复制到下一个电子表格中,但它不会刷新股票数据或每 15 秒重新运行一次应用程序。有人可以帮我找到一个解决方案,以每 x 时间刷新一次股票数据并让程序自动启动/停止。?

【问题讨论】:

    标签: vba excel stockquotes


    【解决方案1】:

    两件事:

    1. i 声明为公共(全局)变量,以便在迭代之间保持其值。

    2. 在复制数据之前执行Application.Calculate,以确保=WebService() 函数在获取值之前调用Yahoo。

    代码:

    Public i As Integer
    
    Sub Capture()
        If i = 0 Then i = 1
        Application.Calculate
        Sheets("recorddata").Cells(1, i) = Sheets("getdata").Range("C1")
        i = i + 1
        Application.OnTime Now + TimeValue("00:00:15"), "Capture"
    End Sub
    

    【讨论】:

    • 感谢您回答我的问题。当我运行程序时它只运行一次而不重复。
    • 对我来说一切都很好。我已经测试了相同的代码,但是用其他东西替换了 Sheets("recorddata").cells(1, i) 行,并做了 1 秒的间隔并取得了成功。出于调试目的,您可能想尝试创建第二个名为 Capture2 的子例程。让 Capture() 在您的 .OnTime 行中调用 Capture2 并让 Capture2 在其 OnTime() 行中调用 Capture。您可以让 capture 2 执行msgbox("Capture2") 之类的操作或其他操作来确认它正在启动。
    猜你喜欢
    • 1970-01-01
    • 2019-04-10
    • 1970-01-01
    • 2019-10-16
    • 2015-05-16
    • 1970-01-01
    • 2011-10-26
    • 1970-01-01
    • 2016-12-24
    相关资源
    最近更新 更多